プライマリ・コンテンツに移動
Oracle® Database SQL言語リファレンス
11gリリース2 (11.2)
B56299-08
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CALL

用途

CALL文を使用すると、SQL内からルーチン(スタンドアロン・プロシージャ、スタンドアロン・ファンクション、あるいは型またはパッケージ内で定義されたプロシージャまたはファンクション)を実行できます。


注意:

「ファンクション式」に指定されているユーザー定義ファンクション式の制限は、CALL文にも適用されます。


関連項目:

これらのルーチンの作成の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

前提条件

スタンドアロン・ルーチン、またはルーチンが定義されている型またはパッケージに対するEXECUTE権限が必要です。

セマンティクス

ルーチンは2つの方法で実行できます。routine_clauseを使用してルーチン自体を名前でコールするか、またはobject_access_expressionを使用して式の型の中でルーチンをコールします。

schema

スタンドアロン・ルーチン(または、ルーチンが含まれている型またはパッケージ)が存在するスキーマを指定します。schemaを指定しない場合、ルーチンは自分のスキーマ内にあるとみなされます。

typeまたはpackage

ルーチンが定義されている型またはパッケージを指定します。

routine_clause

コールするファンクション名またはプロシージャ名、またはファンクションまたはプロシージャに変換されるシノニムを指定します。

型のメンバー・ファンクションまたはメンバー・プロシージャをコールする場合、最初の引数(SELF)がNULLのIN OUTの場合は、エラーが戻されます。SELFがNULLのINの場合には、NULLが戻されます。どちらの場合も、ファンクションまたはプロシージャはコールされません。

ファンクションの制限事項: ルーチンがファンクションの場合、INTO句は必須です。

@dblink

分散データベース・システムで、スタンドアロン・ルーチンが含まれているデータベース、またはルーチンが含まれているパッケージまたはファンクションの名前を指定します。dblinkを指定しない場合、ローカル・データベースを指定したとみなされます。


関連項目:

直接ルーチンをコールする例については、「プロシージャのコール例:」を参照してください。

object_access_expression

型コンストラクタ、バインド変数などのオブジェクト型の式を使用している場合は、この形式の式を使用して、型内で定義されたルーチンをコールできます。このコンテキストでは、object_access_expressionはメソッドのコールに制限されます。


関連項目:

この形式の式の構文およびセマンティクスについては、「オブジェクト・アクセス式」を参照してください。オブジェクト型の式を使用してルーチンをコールする例については、「オブジェクト型の式を使用したプロシージャのコール例:」を参照してください。

argument

ルーチンに引数が必要な場合に、ルーチンの1つ以上の引数を指定します。argumentを、位置表記法、名前表記法および混合表記法で表記できます。たとえば、次の表記はすべて正しい表記です。

CALL my_procedure(arg1 => 3, arg2 => 4) 
CALL my_procedure(3, 4) 

CALL my_procedure(3, arg2 => 4) 

ルーチンへの引数の適用の制限事項: argumentには、次の制限事項があります。

  • CALL文によって渡されるパラメータのデータ型は、SQLのデータ型であることが必要です。BOOLEANなど、PL/SQL専用のデータ型は使用できません。

  • 引数には、疑似列、オブジェクト参照ファンクションVALUEおよびREFは指定できません。

  • ルーチンのIN OUT引数またはOUT引数であるすべての引数は、ホスト変数の式に対応している必要があります。

  • すべての戻り引数を含む引数の数は、1000に制限されています。

  • 4KBを超える文字データ型またはRAWデータ型(CHARVARCHAR2NCHARNVARCHAR2RAWLONG RAW)の引数はバインドできません。

INTO :host_variable

INTO句は、ファンクションのコールにのみ適用されます。ファンクションの戻り値を格納するホスト変数を指定します。

:indicator_variable

ホスト変数の値または状態を指定します。


関連項目:

ホスト変数および標識変数の詳細は、『Pro*C/C++プログラマーズ・ガイド』を参照してください。

プロシージャのコール例: 次の文は、remove_deptプロシージャを使用して、娯楽部門(「順序値の挿入例:」で作成)を削除します。このプロシージャを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CALL emp_mgmt.remove_dept(162); 

オブジェクト型の式を使用したプロシージャのコール例: 次の例では、CALL文のオブジェクト型の式を使用したプロシージャのコール方法を示します。この例では、サンプルの注文入力スキーマOEwarehouse_typオブジェクト型を使用しています。

ALTER TYPE warehouse_typ
      ADD MEMBER FUNCTION ret_name
      RETURN VARCHAR2
      CASCADE;

CREATE OR REPLACE TYPE BODY warehouse_typ
      AS MEMBER FUNCTION ret_name
      RETURN VARCHAR2
      IS
         BEGIN
            RETURN self.warehouse_name;
         END;
      END;
/
VARIABLE x VARCHAR2(25);

CALL warehouse_typ(456, 'Warehouse 456', 2236).ret_name()
   INTO :x;

PRINT x;
X
--------------------------------
Warehouse 456

次の例では、外部ファンクションを使用したプロシージャのコール方法を示します。

CREATE OR REPLACE FUNCTION ret_warehouse_typ(x warehouse_typ) 
  RETURN warehouse_typ
  IS
    BEGIN
      RETURN x;
    END;
/
CALL ret_warehouse_typ(warehouse_typ(234, 'Warehouse 234',
   2235)).ret_name()
   INTO :x;

PRINT x;

X
--------------------------------
Warehouse 234