phonebook というテーブルがあり、2 つの列があります(firstName, LastName)
。カーソルを使用して firstName で lastName インデックスのテーブルを作成したいので、次のコードを書きました。
CREATE OR REPLACE PROCEDURE proc1 AS
TYPE tableNames IS TABLE OF VARCHAR2(20) INDEX BY VARCHAR(20);
v1 tableNames;
v_firstName PHONEBOOK.FIRSTNAME%TYPE;
v_lastName PHONEBOOK.LASTNAME%TYPE;
CURSOR c_name IS SELECT FIRSTNAME, LASTNAME FROM PHONEBOOK;
BEGIN
OPEN c_name;
LOOP
FETCH c_name INTO v_firstName, v_lastName;
EXIT WHEN c_name%NOTFOUND;
v1(v_firstName) := v_lastName;
END LOOP;
FOR idx IN v1.FIRST..v1.LAST
LOOP
DBMS_OUTPUT.PUT_LINE (v1(idx));
END LOOP;
CLOSE c_name;
END;
/
正常にコンパイルされました。この手順を実行すると、tableNames に保存されている lastNames が出力されるはずですが、エラーが発生しました。
ORA-06502 PL/SQL: 数値または値のエラーです。
原因 : 算術、数値、文字列、変換、または制約のエラーが発生しました。たとえば、このエラーは、NOT NULL と宣言された変数に値 NULL を代入しようとした場合、または NUMBER(2) と宣言された変数に 99 より大きい整数を代入しようとした場合に発生します。
処置: 値が制約に違反しないように、データ、操作方法または宣言方法を変更してください。
この問題を解決するのを手伝ってください