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. |
Poznámka: patche z 7.3.2023 a novšie automaticky doplnia pre Oracle BEGIN/END aj bodkočiarky - kvôli štandardne zapnutej ochrane pred vykonaním viacerých príkazov v rámci jedného volania - viď ladiacu kategóriu DBG.DBMANAGER.SANITIZE), takže funguje nasledovná syntax pre uloženú procedúru:
Príklad pre Oracle:
"BEGIN TEST_PROC(?); END;"
resp.
"TEST_PROC(?)"
Príklad pre PostgreSQL:
"call TEST_PROC(IN ?)"
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?) }" "TEST_PROC(IN :par1, INOUT :par2, OUT :par3)" |
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, "TEST_PROC(:p1,:p2,:p3)" BIND _myText, _myInt1, _myInt2 ;_myText má hodnotu "ABCXYZ", _myInt2 má hodnotu 20 (2 * 10) ; volanie funkcie SQL_EXEC_PROC _iHandle, _iRetCode, ":ret := TEST_FUNC(:par1,:par2,:par3)" BIND _myReal, _myInt1, _myInt2, _Succ ; _myReal má hodnotu 0.5 (10 / 20), _Succ má hodnotu 1 |