sql >> データベース >  >> RDS >> Oracle

Oracleストアドプロシージャ:結果セットと出力パラメータの両方を返します

    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.
    



    1. PostgreSQLで文字列と数値を連結する

    2. PostgreSQL列'foo'は存在しません

    3. NLSパラメータとその優先順位を設定する方法(Oracleデータベース)

    4. OracleでTABLEを切り捨てる方法