sql >> Databáze >  >> RDS >> Mysql

PostgreSQL:platný vzorek přiřazení proměnné?

V Postgres SQL nejsou žádné proměnné (proměnné můžete používat pouze v procedurálních jazycích).

Použijte RETURNING v WITH dotaz:

WITH insert_cat AS (
    INSERT INTO main_categorie (description)
    VALUES ('Verbe normal')
    RETURNING id
),
insert_mot AS (
    INSERT INTO main_mot (txt,im,date_c,date_v_d,date_l)
    VALUES ('je m''abaisse',1,NOW(),NOW(),NOW())
    RETURNING id
)
INSERT INTO main_motcategorie (mot_id,categorie_id) 
SELECT m.id, c.id
FROM insert_mot m, insert_cat c;

Alternativně můžete použít vlastní konfigurační parametry způsobem popsaným v tomto příspěvku .

Vytvořte dvě funkce:

create or replace function set_var (name text, value text)
returns void language plpgsql as $$
begin
    execute format('set mysql.%s to %s', name, value);
end $$;

create or replace function get_var (name text)
returns text language plpgsql as $$
declare
    rslt text;
begin
    execute format('select current_setting(''mysql.%s'')', name) into rslt;
    return rslt;
end $$;

Pomocí funkcí můžete simulovat proměnné, jako v příkladu:

INSERT INTO main_categorie (description)
VALUES ('Verbe normal');

SELECT set_var('PRONOMINAL', (SELECT currval('main_categorie_id_seq')::text));

INSERT INTO main_mot (txt,im,date_c,date_v_d,date_l)
VALUES ('je m''abaisse',1,NOW(),NOW(),NOW());

SELECT set_var('verbe_149', (SELECT currval('main_mot_id_seq')::text));

INSERT INTO main_motcategorie (mot_id,categorie_id) 
SELECT get_var('verbe_149')::int, get_var('PRONOMINAL')::int;

Toto rozhodně není příklad dobrého kódu. Obzvláště nutnost castingu je problematická. Konverze však může být provedena poloautomaticky.



  1. mysql kombinované jedinečné klíče

  2. jak mohu aktualizovat 100 nejlepších záznamů na serveru SQL

  3. Jak přidat ID automatického zvýšení podle skupiny v mysql

  4. Vytváření kombinací tabulek/sloupců pomocí SQL Query nebo Laravel SQL Query Builder