Oracle の他の内部からストアド プロシージャを呼び出す
Oracle では、次のストアド プロシージャを 1 つ呼び出す必要があるシナリオが発生する可能性があります。別の中で。これは、この記事で説明するさまざまな方法を使用して実現できます。
テスト ケース
次のテスト コードを考えてみましょう:
SET SERVEROUTPUT ON; DROP PROCEDURE test_sp_1; DROP PROCEDURE test_sp; CREATE PROCEDURE test_sp AS BEGIN DBMS_OUTPUT.PUT_LINE('Test works'); END; / CREATE PROCEDURE test_sp_1 AS BEGIN DBMS_OUTPUT.PUT_LINE('Testing'); test_sp; END; / CALL test_sp_1;
問題と解決策
指定されたコードの問題は、最後の行は、ストアド プロシージャを直接呼び出すことを試みます。これは、次の 3 つの方法のいずれかを利用することで解決できます。
1.呼び出し構文
Oracle の SQL リファレンスでは、ストアド プロシージャを呼び出すための構文を次のように定義しています。
CALL <procedure_name>(<argument_list>);
引数が渡されない場合でも、プロシージャ名をかっこで囲みます。
CALL test_sp_1();
2.匿名 PL/SQL ブロック
匿名 PL/SQL ブロックでは、明示的に名前を付けずにストアド プロシージャを呼び出すことができます。
BEGIN test_sp_1; END; /
3. Exec コマンド (SQL*Plus)
SQL*Plus は、匿名ブロックのショートカットとして exec コマンドを提供します。指定されたストアド プロシージャを、匿名ブロックの一部であるかのように実行します。
EXEC test_sp_1;
例
完全に動作する例を次に示します。
SET SERVEROUTPUT ON; CREATE OR REPLACE PROCEDURE test_sp AS BEGIN DBMS_OUTPUT.PUT_LINE('Test works'); END; / CREATE OR REPLACE PROCEDURE test_sp_1 AS BEGIN DBMS_OUTPUT.PUT_LINE('Testing'); test_sp; END; / CALL test_sp_1(); -- Direct call exec test_sp_1; -- SQL*Plus shortcut BEGIN test_sp_1; END; -- Anonymous PL/SQL block
出力:
Testing Test works Testing Test works Testing Test works
以上がある Oracle ストアド プロシージャを別のストアド プロシージャ内から呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。