Oracleでは、INTO
なしで直接選択ステートメントを実行することはできません。 句。
Oracle 12c以降を使用している場合は、REF CURSOR
を使用できます。 およびDBMS_SQL.RETURN_RESULT
create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER) AS
q SYS_REFCURSOR;
BEGIN
OPEN q FOR select * from Employee e where e.id >=empId;
DBMS_SQL.return_result (q); -- This will display the result
select max(salary) into maxSalary from Employee;
END;
以前のバージョン(11g、10g)の場合、REF CURSOR
を渡すことができます OUT
として パラメータを設定し、sqlplus
から出力します またはスクリプトとして実行してTOAD。
create or replace procedure foo(empId IN NUMBER, maxSalary OUT NUMBER,
q OUT SYS_REFCURSOR) AS
BEGIN
OPEN q FOR select * from Employee e where e.id >=empId;
select max(salary) into maxSalary from Employee;
END;
プロシージャを呼び出す前にバインド変数を定義します。
VARIABLE v_empID NUMBER
VARIABLE v_maxsalary NUMBER
VARIABLE v_q REFCURSOR
EXEC :v_empID := 101
EXEC foo(:v_empID,:v_maxsalary,:v_q )
PRINT v_q -- This will display the result from the query.