SQL_EXEC_PROC handleIdent_Int, retCodeIdent_Int, stringExpr BIND _locVar1, _locVar2, ... SQL_EXEC_PROC handleIdent_Int, retCodeIdent_Int, stringExpr BIND _locVarRowIdent SQL_EXEC_PROC handleIdent_Int, retCodeIdent_Int, stringExpr BIND _locVarRecordIdent |
| handleIdent_Int | in | Identifikátor typu Int - jednoznačné číslo (handle) spojenia s databázou. |
| retCodeIdent_Int | out | Identifikátor typu Int - návratový kód. |
| strExpr | in | Výraz typu Text - SQL procedúra alebo funkcia. |
| _locVar1, _locVar2, ... | in/out | Zoznam lokálnych premenných. |
| _locVarRowIdent | in/out | Odkaz na riadok lokálnej premennej typu Record. |
| _locVarRecordIdent | in/out | Identifikátor lokálnej premennej typu Record. |
Procedúra s tromi parametrami, druhý parameter je konštanta: "BEGIN TEST_PROC(:par1,5,:par3); END;"
resp.
TEST_PROC(:par1,5,:par3)
Poradie parametrov je určené poradím v reťazci (v predchádzajúcom prípade :res, :par1 a :par2). Pokiaľ sú parametre nazvané rovnakým menom, chápu sa ako jediný parameter, t.j. SQL príkaz "BEGIN :res := TEST_FUNC(:parX,:parX); END;" má dva parametre a to :res (výstup funkcie) a :parX (dva vstupné parametre funkcie s tou istou hodnotou).
V OCI verzii procesu D2000 DBManager môže byť SQL príkaz aj celá sekvencia, napr.
"BEGIN :res := TEST_FUNC(:par1,:par2); IF :res=0 THEN :res := TEST_FUNC2(:par1,:par2); END IF; END;""
"
{ call TEST_PROC(IN ?, INOUT?, OUT?) }
"
"BEGIN TEST_PROC(IN :par1, INOUT :par2, OUT :par3); END;"
|
1. ODBC verzia procesu D2000 DBManager
Príklad vytvorenia uložených procedúr v SQL Anywhere:
/* par1 je vstupno/výstupný parameter, par2 je vstupný a par3 je výstupný */
create procedure TEST_PROC(@par1 varchar(10) output, @par2 integer,@par3 integer output)
as
declare @vysl integer
begin
select @par=@par+'XYZ'
select @par3=2*@par2
end
/* príklad funkcie s dvoma parametrami (Sybase podporuje iba vstupné parametre funkcie) */
create function TEST_FUNC(in @par1 real,in @par2 integer)
returns real as
begin
return(@par1*@par2)
end
Volanie zo skriptu:
BEGIN
INT _myInt
INT _iRetCode
INT _iHandle
TEXT _myText
REAL _myReal
INT _myInt1
INT _myInt2
_myText := "ABC"
_myInt1 := 10
SQL_CONNECT MyDB, _iHandle, _iRetCode
; volanie procedúry
SQL_EXEC_PROC _iHandle, _iRetCode, "{ call TEST_PROC(?,?,?) }" BIND _myText, _myInt1, _myInt2
;_myText má hodnotu "ABCXYZ", _myInt2 má hodnotu 20 (2 * 10)
; volanie procedúry s konštantným parametrom
SQL_EXEC_PROC _iHandle, _iRetCode, "{ call TEST_PROC(?,3,?) }" BIND _myText, _myInt1
;_myText má hodnotu "ABCXYZXYZ", _myInt2 má hodnotu 6 (2 * 3)
; volanie funkcie
SQL_EXEC_PROC _iHandle, _iRetCode, "{ ? = call TEST_FUNC(?,?) }" BIND _myReal, _myInt1, _myInt2
; _myReal má hodnotu 60 (10 * 6)
; volanie funkcie s konštantným parametrom
SQL_EXEC_PROC _iHandle, _iRetCode, "{ ? = call TEST_FUNC(?,3.3) }" BIND _myReal, _myInt1
; _myReal má hodnotu 33 (10 * 3.3) |
2. OCI verzia procesu D2000 DBManagera
Príklad vytvorenia uložených procedúr v Oracle 9i:
/* par1 je vstupno/výstupný parameter, par2 je vstupný a par3 je výstupný */
CREATE OR REPLACE PROCEDURE "MYUSER"."TEST_PROC" (
par1 in out varchar,par2 integer, par3 out integer
)
as
begin
par1 := par1 || 'XYZ';
par3 := 2 * par2;
end;
/* par1,par2 sú vstupné parametre, succ je výstupný */
CREATE OR REPLACE FUNCTION "MYUSER"."TEST_FUNC" (
par1 in float, par2 in float, succ out integer
)
return float
as
begin
if par2 = 0.0 then
succ := 0;
return 0;
else
succ := 1;
return par1/par2;
end if;
end;
Volanie zo skriptu:
BEGIN INT _myInt INT _iRetCode INT _iHandle TEXT _myText REAL _myReal INT _myInt1 INT _myInt2 INT _Succ _myText := "ABC" _myInt1 := 10 SQL_CONNECT MyDB, _iHandle, _iRetCode ; volanie procedúry SQL_EXEC_PROC _iHandle, _iRetCode, "BEGIN TEST_PROC(:p1,:p2,:p3); END;" BIND _myText, _myInt1, _myInt2 ;_myText má hodnotu "ABCXYZ", _myInt2 má hodnotu 20 (2 * 10) ; volanie funkcie SQL_EXEC_PROC _iHandle, _iRetCode, "BEGIN :ret := TEST_FUNC(:par1,:par2,:par3); END;" BIND _myReal, _myInt1, _myInt2, _Succ ; _myReal má hodnotu 0.5 (10 / 20), _Succ má hodnotu 1 |