CALL
目的
CALL
文を使用すると、SQL内からルーチン(スタンドアロン・プロシージャ、スタンドアロン・ファンクション、あるいは型またはパッケージ内で定義されたプロシージャまたはファンクション)を実行できます。
ノート:
「ファンクション式」に指定されているユーザー定義ファンクション式の制限事項は、CALL
文にも適用されます。
関連項目:
これらのルーチンの作成の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。
前提条件
スタンドアロンのルーチン上、またはルーチンが定義されている型やパッケージ上で、EXECUTE
権限を持っている必要があります。
構文
call::=
routine_clause::=
object_access_expression::=
セマンティクス
ルーチンは2つの方法で実行できます。routine_clause
を使用してルーチン自体を名前でコールするか、またはobject_access_expression
を使用して式の型の中でルーチンをコールします。
routine_clause
コールするファンクション名またはプロシージャ名、またはファンクションまたはプロシージャに変換されるシノニムを指定します。
型のメンバー・ファンクションまたはメンバー・プロシージャをコールする場合、最初の引数(SELF
)がNULLのIN
OUT
の場合は、エラーが戻されます。SELF
がNULLのIN
の場合には、NULLが戻されます。どちらの場合も、ファンクションまたはプロシージャはコールされません。
ファンクションの制限事項
ルーチンがファンクションの場合、INTO
句が必要です。
schema
スタンドアロン・ルーチン(または、ルーチンが含まれている型またはパッケージ)が存在するスキーマを指定します。schema
を指定しない場合、ルーチンは自分のスキーマ内にあるとみなされます。
typeまたはpackage
ルーチンが定義されている型またはパッケージを指定します。
@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データ型(
CHAR
、VARCHAR2
、NCHAR
、NVARCHAR2
、RAW
、LONG
RAW
)の引数はバインドできません。
INTO :host_variable
INTO
句は関数のコールにのみ適用されます。ファンクションの戻り値を格納するホスト変数を指定します。
例
プロシージャのコール: 例
次の文は、remove_dept
プロシージャを使用して、Entertainment部門(「順序値の挿入: 例」で作成)を削除します。このプロシージャを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。
CALL emp_mgmt.remove_dept(162);
オブジェクト型の式を使用したプロシージャのコール: 例
次の例では、CALL
文のオブジェクト型の式を使用したプロシージャのコール方法を示します。この例では、サンプルの注文入力スキーマOE
でwarehouse_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