sql >> データベース >  >> RDS >> Mysql

PostgreSQL:有効な変数割り当てサンプル?

    Postgres SQLには変数はありません(手続き型言語でのみ変数を使用できます)。

    RETURNINGを使用する WITH クエリ:

    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;
    

    別の方法として、この投稿 で説明されている方法でカスタム構成パラメーターを使用できます。 。

    2つの関数を作成します:

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

    関数を使用すると、例のように変数をシミュレートできます。

    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;
    

    これは確かに良いコードの例ではありません。特にキャストの必要性は厄介です。ただし、変換は半自動で行うことができます。



    1. Oracleのインデックスとテーブルの所有者に関する情報を取得するにはどうすればよいですか?

    2. ユーザーのすべてのアクティブおよび非アクティブなOracleセッションを強制終了する方法

    3. SQLServerのアクティブなセッションとステータス

    4. PostgreSQLデータベースを保護する方法-10のヒント