PL/SQL で、テーブルの型に合わせた2次元配列を作りたいのですが、
普通、多次元配列の作り方は、
PL/SQL
1TYPE tElement IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; 2TYPE tSquare IS TABLE OF tElement INDEX BY BINARY_INTEGER; 3 4vSquare tSquare; 5vSquare(0)(0) := 0; 6vSquare(0)(1) := 1; 7... 8
出典https://www.shift-the-oracle.com/plsql/collection/multi-dimension-array.html
のように書きますが、ここで、データ型を、あるテーブルAと同じにしたいのです。
やってみたことは、1行目を書き換えて、
PL/SQL
1TYPE tElement IS TABLE OF MY_TABLE_A%ROWTYPE INDEX BY BINARY_INTEGER; 2TYPE tSquare IS TABLE OF tElement INDEX BY BINARY_INTEGER; 3 4vSquare tSquare; 5vSquare(0)(0) := 1000; 6vSquare(0)(1) := 'ABC'; 7...
TABLE
1CREATE TABLE MY_TABLE_A ( 2 num NUMBER(5) NOT NULL, 3 name VARCHAR2(15) NOT NULL, 4 score1 NUMBER(10) NOT NULL, 5 score2 NUMBER(10) NOT NULL, 6 score3 NUMBER(10) NOT NULL, 7 score4 NUMBER(10) NOT NULL, 8 score5 NUMBER(10) NOT NULL, 9 score6 NUMBER(10) NOT NULL, 10 score7 NUMBER(10) NOT NULL, 11 score8 NUMBER(10) NOT NULL, 12 score9 NUMBER(10) NOT NULL 13);
としてみたことです。
しかし、どこでおかしくなっているのかわかりませんが、vSquareのどこかのデータを取得しようとすると、「型が違います」というエラーで中断されます。
たとえば、
PL/SQL
1IF vSquare(0)(10) = 0 THEN /* ここで型エラー TO_CHAR(0)でも同様 */ 2 /* 処理 */ 3END IF;
のようなことをすると、たちまち落ちます。配列の要素が空だったからではないかと思い、初期値をいれておいてもダメでした。
ところで、最初のサンプルのコード元は、配列の要素を
PL/SQL
1 /* 抜粋 */ 2 FOR i in 1 .. 9 LOOP 3 FOR j in 1..9 LOOP 4 P_ARRAY(i)(j) := i * j; 5 END LOOP; 6 END LOOP;
と、1から指定して、0から指定していません、計算の都合上からでしょうか。それともPL/SQLの仕様でしょうか。
回答2件
あなたの回答
tips
プレビュー