変数を宣言する必要があります。
CREATE OR REPLACE
PROCEDURE PROCEDURE1 AS
V_FIRSTNAME VARCHAR2(60);
V_LASTNAME VARCHAR2(60);
BEGIN
SELECT FIRSTNAME,LASTNAME
INTO V_FIRSTNAME ,V_LASTNAME
FROM EMPLOYEE;
END PROCEDURE1;
コメントへの返信として、PL/SQL ブロック内の SQL ステートメントは 1 つのレコードしか取得できません。複数のレコードをフェッチする必要がある場合は、レコードをカーソルに格納して処理する必要があります。
CREATE OR REPLACE
PROCEDURE PROCEDURE1 AS
CURSOR EMP_CUR IS
SELECT FIRSTNAME,LASTNAME
FROM EMPLOYEE;
EMP_CUR_REC EMP_CUR%ROWTYPE;
BEGIN
FOR EMP_CUR_REC IN EMP_CUR LOOP
-- do your processing
DBMS_OUTPUT.PUT_LINE('Employee first name is ' || EMP_CUR_REC.FIRSTNAME);
DBMS_OUTPUT.PUT_LINE('Employee last name is ' || EMP_CUR_REC.LASTNAME);
END LOOP;
END PROCEDURE1;
説明する:
EMP_CUR
実行する SQL ステートメントを保持します。
EMP_CUR_REC
SQL ステートメントによってフェッチされるレコードを保持します。
%ROWTYPE
Record が、データを保持する行と同じデータ型になることを示します
はFOR LOOP
各レコードをフェッチし、実行する必要がある処理を実行できます。