web-dev-qa-db-ja.com

INおよびOUTパラメータを使用してOracleのストアドプロシージャを呼び出す

私はこの手順を持っています:

CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;

したがって、このように実行すると、何も返されません。

DECLARE
    amount NUMBER;
BEGIN
    PROC1(1000001, amount);
    dbms_output.put_line(amount);
END;

ところで、DreamCoder for Oracleを使用しています。プロシージャ自体または私がそれを呼び出す方法に問題がありますか? INVOICE_NRが1000001に等しいエントリがINVOICEテーブルにあります。

38
RegedUser00x

コード全体の前にサーバー出力をONモードに設定すると機能します。そうしないと、put_line()は機能しません。それを試してみてください!

コードは

set serveroutput on;
CREATE OR REPLACE PROCEDURE PROC1(invoicenr IN NUMBER, amnt OUT NUMBER)
AS BEGIN
SELECT AMOUNT INTO amnt FROM INVOICE WHERE INVOICE_NR = invoicenr;
END;

そして、そのまま関数を呼び出します:

DECLARE
amount NUMBER;
BEGIN
PROC1(1000001, amount);
dbms_output.put_line(amount);
END;
50
Keerthi

私は同じ問題を抱えていました。トリガーを使用し、そのトリガーで2つのOUT変数の値を計算するプロシージャを呼び出しました。関数内の2つのローカル変数、必要なものを計算し、最後にそれらの変数をOUTプロシージャ変数にコピーします。成功することを願っています。

3
Elneny

メニューツール-> [SQL出力]に移動し、PL/SQLステートメントを実行すると、出力が[SQL出力]パネルに表示されます。

1
Alvin