ホームページ > データベース > mysql チュートリアル > ある Oracle ストアド プロシージャを別のストアド プロシージャ内から呼び出すにはどうすればよいですか?

ある Oracle ストアド プロシージャを別のストアド プロシージャ内から呼び出すにはどうすればよいですか?

DDD
リリース: 2024-12-24 15:20:11
オリジナル
673 人が閲覧しました

How Can I Call One Oracle Stored Procedure from Within Another?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート