このトピックでは、コレクション変数に値を割り当てる方法について説明します。
概要
次のいずれかの方法を使用して、値をコレクション変数に割り当てます。
コンストラクターを呼び出してコレクションを作成し、コレクション変数に割り当てます。
代入ステートメントを使用して、既存のコレクション変数の値を別のコレクション変数に代入します。
サブプログラムに
OUT
またはin OUT
モードのパラメータとしてコレクション変数を渡し、サブプログラム内のコレクション変数に値を代入します。 可変長配列とネストされたテーブルのみがこのメソッドをサポートします。 連想配列はこのメソッドをサポートしていません。collection(index) = value
構文を使用して、コレクション変数の要素に値を割り当てます。
説明
2つのコレクション内の要素の型が同じである場合、または暗黙的に変換できる場合は、一方のコレクション変数の値をもう一方のコレクション変数に割り当てることができます。
例
成功した割り当ての次の例を参照してください。
DECLARE
TYPE char_col1はCHAR(5) のVARRAY(3) です。
タイプchar_col2はCHAR(5) のVARRAY(3) です;
TYPE int_colはINTのVARRAY(3) です。
group1 char_col1 := char_col1('1' 、'2' 、'3');
group2 char_col2;
group3 int_col;
開始
group2 := group1; -- 同じ型の要素を含む異なる型のコレクション変数。
昇格通知 'group2:';
FOR i IN 1 .. 3ループ
昇格通知 '%' 、group2(i);
END LOOP;
group3 := group1; -- 型を暗黙的に変換できる要素を含むさまざまな型のコレクション変数。
昇格通知 'group3:';
FOR i IN 1 .. 3ループ
RAISE NOTICE '%' 、group3(i);
エンドループ;
エンド;
サンプル結果:
通知: group2:
通知: 1
通知: 2
通知: 3
注意: group3:
通知: 1
通知: 2
通知: 3
行う
暗黙的な変換が失敗した場合、対応する要素に値が割り当てられたときにエラーが返されます。 失敗した割り当ての次の例を参照してください。
DECLARE
TYPE char_colはCHAR(5) のVARRAY(3) です。
TYPE int_colはINTのVARRAY(3) です。
group1 char_col := char_col('1', 'a'); -- a型はint型に変換できません。
group2 int_col;
開始
group2 := group1;
エンド;
サンプル結果:
ERROR: 整数型の無効な入力構文: "a"
コンテキスト: 割り当て時のPL/SQL関数inline_code_block行8
NULLを使用して、初期化された可変長配列またはネストされたテーブルにnullを割り当てることができます。
DECLARE
TYPE nt_typeはINTのテーブルです。
nt nt_type; -- 初期値はnullです。
PROCEDURE print_status IS
BEGIN
ntがNULLである場合
DBMS_OUTPUT.PUT_LINE('nt is null.');
ELSE
DBMS_OUTPUT.PUT_LINE('nt is not null.');
END IF;
エンド;
開始
print_status;
nt=nt_type(); -- 初期値は空の値であり、ヌルではない。
print_status;
nt = NULL; -- 収集変数にnullを割り当てます。
print_status;
エンド;
サンプル結果:
ntはnullです。
ntはnullではありません。
ntはnullです。
行う
連想配列変数はnullにすることはできません。 連想配列変数にnullを割り当てると、エラーが返されます。
DECLARE
TYPE aarray_typeはVARCHAR(10) によるINTインデックスのテーブルです。
aarray aarray_type := NULL; -- 連想配列変数にnullを割り当てます。
開始
エンド;
サンプル結果:
ERROR: 連想配列にNULLを割り当てることはできません
CONTEXT: ステートメントブロックのローカル変数の初期化
中のPL/SQL関数inline_code_block行4