0

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 より大きい整数を代入しようとした場合に発生します。
処置: 値が制約に違反しないように、データ、操作方法または宣言方法を変更してください。

この問題を解決するのを手伝ってください

4

1 に答える 1