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

Oracleの別のストアドプロシージャを呼び出す

    ストアドプロシージャはコード化されたとおりに機能します。問題は最後の行にあり、どちらのストアドプロシージャも呼び出せません。

    SQL*Plusの3つの選択肢は次のとおりです。callexec 、および匿名のPL/SQLブロック。

    call SQLキーワードのようであり、SQLリファレンスに記載されています。 http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_4008.htm#BABDEHHG構文図は、呼び出しルーチンに引数が渡されていない場合でも、括弧が必要であることを示しています。

    >
    CALL test_sp_1();
    

    匿名のPL/SQLブロックは、名前付きプロシージャ、関数、トリガーなどの内部にないPL/SQLです。プロシージャの呼び出しに使用できます。

    BEGIN
        test_sp_1;
    END;
    /
    

    Exec 上記の匿名ブロックのショートカットであるSQL*Plusコマンドです。 EXEC <procedure_name> BEGIN <procedure_name>; END;

    完全な例:

    SQL> SET SERVEROUTPUT ON
    SQL> CREATE OR REPLACE PROCEDURE test_sp 
      2  AS 
      3  BEGIN 
      4      DBMS_OUTPUT.PUT_LINE('Test works'); 
      5  END;
      6  /
    
    Procedure created.
    
    SQL> CREATE OR REPLACE PROCEDURE test_sp_1 
      2  AS
      3  BEGIN
      4      DBMS_OUTPUT.PUT_LINE('Testing'); 
      5      test_sp; 
      6  END;
      7  /
    
    Procedure created.
    
    SQL> CALL test_sp_1();
    Testing
    Test works
    
    Call completed.
    
    SQL> exec test_sp_1
    Testing
    Test works
    
    PL/SQL procedure successfully completed.
    
    SQL> begin
      2      test_sp_1;
      3  end;
      4  /
    Testing
    Test works
    
    PL/SQL procedure successfully completed.
    
    SQL> 
    


    1. SQLServerでストアドプロシージャを作成する方法

    2. MySQL:トランザクションとテーブルのロック

    3. LinuxマシンからJDBCを介してWindows認証を使用してSQLServerに接続する

    4. 別のテーブルに存在しないレコードを1つのテーブルから検索します