sql >> Database teknologi >  >> RDS >> Mysql

PostgreSQL:en gyldig variabel tildelingsprøve?

Der er ingen variable i Postgres SQL (du kan kun bruge variabler på proceduresprog).

Brug RETURNING i WITH forespørgsel:

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;

Som et alternativ kan du bruge tilpassede konfigurationsparametre på den måde, der er beskrevet i dette indlæg .

Opret to funktioner:

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 $$;

Med funktionerne kan du simulere variable, som i eksemplet:

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;

Dette er bestemt ikke et eksempel på god kode. Især nødvendigheden af ​​casting er besværlig. Konverteringen kan dog udføres semi-automatisk.



  1. Opdatering af Oracle Table fra Excel VBA Macro ved hjælp af ODBC-forbindelse

  2. Vil du inkludere overskrifter, når du bruger SELECT INTO OUTFILE?

  3. hvordan man giver samme serienummer for en gruppe af poster i mysql

  4. Hvorfor denne databasemigreringsfejl, efter at jeg har opgraderet min version django-mptt?