Oracle9i SQL Reference Release 2 (9.2) Part Number A96540-02 |
|
|
View PDF |
Use the CALL
statement to execute a routine (a standalone procedure or function, or a procedure or function defined within a type or package) from within SQL.
See Also:
PL/SQL User's Guide and Reference for information on creating such routine |
You must have EXECUTE
privilege on the standalone routine or on the type or package in which the routine is defined.
call::=
Specify the schema in which the standalone routine (or the package or type containing the routine) resides. If you do not specify schema
, then Oracle assumes the routine is in your own schema.
Specify the type or package in which the routine is defined.
Specify the name of the function or procedure being called, or a synonym that translates to a function or procedure.
When you call a type's member function or procedure, if the first argument (SELF
) is a null IN
OUT
argument, then Oracle returns an error. If SELF
is a null IN argument, then Oracle returns null. In both cases, the function or procedure is not invoked.
If the routine is a function, then the INTO
clause is mandatory.
In a distributed database system, specify the name of the database containing the standalone routine (or the package or function containing the routine). If you omit dblink
, then Oracle looks in your local database.
See Also:
"Calling a Procedure: Example" for an example of calling a routine directly |
If you have an expression of an object type, such as a type constructor or a bind variable, you can use the object_access_expression
syntax to call a routine defined within the type.
The syntax permitted in this context is a subset of object access expressions (see "Object Access Expressions"). Used within the CALL
statement, you can invoke only methods (not attributes), and object_expr
must be a literal (not a column name or other nonliteral expression). Therefore, the syntax allowed is:
expression.method
where expression
is the literal expression of the object type and method
is a member method of the object type.
See Also:
"Calling a Procedure Using an Expression of an Object Type: Example" for an example of calling a routine using an expression of an object type |
Specify one or more arguments to the routine, if the routine takes arguments.
argument
cannot be a pseudocolumn or either of the object reference functions VALUE
or REF
.argument
that is an IN
OUT
or OUT
argument of the routine must correspond to a host variable expression.The INTO
clause applies only to calls to functions. Specify which host variable will store the return value of the function.
Specify the value or condition of the host variable.
See Also:
Pro*C/C++ Precompiler Programmer's Guide for more information on host variables and indicator variables |
The following statement uses the remove_dept
procedure (created in "Creating a Package Body: Example") to remove the Entertainment department (created in "Inserting Sequence Values: Example"):
CALL remove_dept(162);
The following examples show how call a procedure by using an expression of an object type in the CALL
statement. The example uses the warehouse_typ
object type in the order entry sample schema OE
:
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
The next example shows how to use an external function to achieve the same thing:
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