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

Oracleに挿入し、生成されたシーケンスIDを取得する

    @Guruと@Ronnisからの回答を少し拡張すると、シーケンスを非表示にして、トリガーを使用した自動インクリメントのように見せることができます。また、挿入を実行し、生成されたIDを出力として返すプロシージャを作成できます。パラメータ。

    create table batch(batchid number,
        batchname varchar2(30),
        batchtype char(1),
        source char(1),
        intarea number)
    /
    
    create sequence batch_seq start with 1
    /
    
    create trigger batch_bi
    before insert on batch
    for each row
    begin
        select batch_seq.nextval into :new.batchid from dual;
    end;
    /
    
    create procedure insert_batch(v_batchname batch.batchname%TYPE,
        v_batchtype batch.batchtype%TYPE,
        v_source batch.source%TYPE,
        v_intarea batch.intarea%TYPE,
        v_batchid out batch.batchid%TYPE)
    as
    begin
        insert into batch(batchname, batchtype, source, intarea)
        values(v_batchname, v_batchtype, v_source, v_intarea)
        returning batchid into v_batchid;
    end;
    /
    

    次に、単純な挿入を行う代わりに、プロシージャを呼び出すことができます。匿名のブロックから:

    declare
        l_batchid batch.batchid%TYPE;
    begin
        insert_batch(v_batchname => 'Batch 1',
            v_batchtype => 'A',
            v_source => 'Z',
            v_intarea => 1,
            v_batchid => l_batchid);
        dbms_output.put_line('Generated id: ' || l_batchid);
    
        insert_batch(v_batchname => 'Batch 99',
            v_batchtype => 'B',
            v_source => 'Y',
            v_intarea => 9,
            v_batchid => l_batchid);
        dbms_output.put_line('Generated id: ' || l_batchid);
    end;
    /
    
    Generated id: 1
    Generated id: 2
    

    明示的な匿名ブロックなしで電話をかけることができます。 SQL * Plusから:

    variable l_batchid number;
    exec insert_batch('Batch 21', 'C', 'X', 7, :l_batchid);
    

    ...そしてバインド変数:l_batchidを使用します 後で生成された値を参照するには:

    print l_batchid;
    insert into some_table values(:l_batch_id, ...);
    


    1. 分をHH24:MI形式に変換する

    2. SQL Serverの別のデータベースからテーブルのデータを選択するにはどうすればよいですか?

    3. SQL Serverのリンクサーバーから列情報を返す(T-SQLの例)

    4. SQLServerのカーソルタイプ-静的カーソルのみを転送| SQLServerチュートリアル/TSQLチュートリアル