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

カーソルの行タイプ型オブジェクトを使用したOracle一括収集の例

    この投稿では、OracleBulkCollectおよびFORALLコマンドを使用して挿入を実行する例を示しています。カーソルを使用してEMP表からデータを取得するPLSQL関数を作成し、そのカーソル行タイプの型配列変数を作成してから、FORALLを使用して一括収集してBONUS表に挿入します。

    以下に例を示します。

    CREATE OR REPLACE FUNCTION f_currowtype
    RETURN BOOLEAN
    IS
    CURSOR c_emp
    IS
    SELECT empno,
    ename,
    job,
    sal
    FROM emp;
    
    TYPE t_emp IS TABLE OF c_emp%ROWTYPE;
    
    e_rec   t_emp;
    BEGIN
    OPEN c_emp;
    
    FETCH c_emp
    BULK COLLECT INTO e_rec;
    
    CLOSE c_emp;
    
    FORALL i IN e_rec.FIRST .. e_rec.LAST
    insert into bonus (empno, amount)
    values (e_rec(i).empno, e_rec(i).sal * 10 / 100);
    
    DBMS_OUTPUT.put_line ('Rows inserted: ' || SQL%ROWCOUNT);
    
    COMMIT;
    RETURN TRUE;
    EXCEPTION
    WHEN OTHERS
    THEN
    ROLLBACK;
    RETURN FALSE;
    END;

    以下のように実行できます:

    SET SERVEROUTPUT ON;
    
    BEGIN
    IF f_currowtype
    THEN
    DBMS_OUTPUT.put_line ('Success');
    ELSE
    DBMS_OUTPUT.put_line ('Failed');
    END IF;
    END;
    1. WindowsマシンでPostgresql11を実行すると、Moreが認識されない...エラーが発生する原因は何ですか?

    2. 予防トリガー

    3. 完全なストアドプロシージャコードを表示する方法は?

    4. Oracle®のSQLServerストアドプロシージャ