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

OraclePLSQLの例の表タイプ

    PL SQL表タイプは、実際には配列のようなコレクションです。 PL SQLコレクションを使用すると、バルク・データを効率的に処理できます。この投稿では、PLSQL表タイプのコレクションに対して非常に基本的で最も頻繁に使用されるコマンドについて説明します。以下は、OraclePLSQLの例のテーブルタイプです。

    まず、PLSQLブロックのdeclareセクションで宣言する必要があります。例を使用した構文は次のとおりです。

    OraclePLSQLの例の表タイプ

    1。 PLSQL表タイプを宣言する

    Type any_table_type is table of emp%rowtype index by binary_integer;
    emp_rec any_table_type;
    によるemp%rowtypeインデックスのテーブルです。

    上記のコマンドは、empテーブル行タイプのテーブルタイプany_table_typeを宣言してから、emp_recで初期化します。宣言後、手動で値を割り当てることができます。以下に例を示します。

    2。 PLSQL表タイプに値を割り当てる

    set serveroutput on;
    declare
    Type any_table_type is table of emp%rowtype 
        index by binary_integer;
    emp_rec any_table_type;
    begin
    emp_rec(1).ename := 'abc'; /* assigning values */
    emp_rec(2).ename := 'xyz';
    dbms_output.put_line(emp_rec(1).ename); /* accessing values */
    dbms_output.put_line(emp_rec(2).ename);
    end;

    PL SQLテーブルはのような配列であるため、上記のように、配列要素番号を指定して値を割り当てる必要があります。以下は、PLSQLテーブルタイプコレクションから削除する方法の例です。

    3。 PLSQL表タイプからの要素の削除

    set serveroutput on;
    declare
    Type any_table_type is table of emp%rowtype index by binary_integer;
    emp_rec any_table_type;
    begin
    emp_rec(1).ename := 'abc';
    emp_rec(2).ename := 'xyz';
    emp_rec.delete(1); /* will delete first element */
    for i in emp_rec.first .. emp_rec.last loop /* loop through the array */
    dbms_output.put_line(emp_rec(i).ename);
    end loop;
    end;

    上記の例では、最初の要素が削除され、2番目の要素のみが印刷されます。上記のブロックを実行すると、出力は次のようになります。

    xyz
    PL/SQLプロシージャが正常に完了しました。

    PL SQL表タイプからすべての要素を削除するには、以下に例を示します。

    emp_rec.delete;

    4。一括収集を使用したPLSQL表タイプの移入

    以下は、empテーブルからデータをフェッチするOracle PL SQLの例のテーブルタイプです。次に、BulkCollectを使用してPLSQLテーブルタイプにデータを入力し、FORALLを使用してempテーブルを更新します。次に例を示します。

    set serveroutput on;
    
    DECLARE
       CURSOR c
       IS
          SELECT * FROM emp;
    
       TYPE any_table_type IS TABLE OF emp%ROWTYPE
                                 INDEX BY BINARY_INTEGER;
    
       emp_rec   any_table_type;
    BEGIN
       OPEN c;
    
       FETCH c
       BULK COLLECT INTO emp_rec;
    
       CLOSE c;
    
       FORALL i IN emp_rec.FIRST .. emp_rec.LAST
          UPDATE emp
             SET comm = emp_rec (i).sal * 10 / 100
           WHERE empno = emp_rec (i).empno;
    
       COMMIT;
    END;

    PL SQLプロシージャ・ツールをチェックして、開発用のスクリプトを生成することもできます。

    1. OracleSQLでの文字の出現回数のカウント

    2. Java Oracle localhost接続エラー(ORA-12505)

    3. PostgreSQLのレプリケーショントポロジの変更の実行

    4. TypeORMサブクエリ