52

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

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 テーブルには、INVOICE_NR が 1000001 に等しいエントリがあります。

4

3 に答える 3

68

コード全体の前にサーバー出力を 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;
于 2013-06-16T06:52:53.830 に答える
3

私も同じ問題を抱えていました。トリガーを使用し、そのトリガーでいくつかの値を 2 つの OUT 変数に計算するプロシージャを呼び出しました。結果をトリガー本体に印刷しようとすると、画面に何も表示されませんでした。しかし、関数で2つのローカル変数を作成し、それらで必要なものを計算し、最後にそれらの変数を OUT プロシージャ変数にコピーすることで、この問題を解決しました。それが有用で成功することを願っています!

于 2016-05-04T22:46:24.840 に答える
1

「メニュー・ツール」->「SQL出力」に移動し、PL / SQL文を実行すると、出力が「SQL出力」パネルに表示されます。

于 2012-04-07T05:54:17.733 に答える