Ho la seguente funzione Oracle:
create or replace function SIOFG501_TROVA_PROSSIMO(
i_codaz in char, <-- INPUT
i_utente in varchar2, <-- INPUT
i_tipo in number, <-- INPUT
o_delega out number, <-- OUTPUT
o_apprcassa out number, <-- OUTPUT
o_prossima out varchar2 <-- OUTPUT
)
return number is res number;
QUI CI STA IL CODICE
end SIOFG501_TROVA_PROSSIMO;
Che riceve in input 3 parametri (i_codaz, i_utente, i_tipo) e torna 3 parametri di output (o_delega, o_apprcassa, o_prossima), oltre all'esito dell'esecuzione (res).
Fin qui tutto ok!
Nella pagina asp in cui va invocata questa funzione, vengono seguiti degli step appositi, te li scrivo.
1 STEP
codice:
'------------------------------------------
'set up server side parameters
'------------------------------------------
OraDatabase.Parameters.Add "CODAZ", CODAZ, 1
OraDatabase.Parameters("CODAZ").ServerType = 1
OraDatabase.Parameters.Add "APPROVATORE", APPROVATORE, 1
OraDatabase.Parameters("APPROVATORE").ServerType = 1
OraDatabase.Parameters.Add "TIPOLOGIA", TIPOLOGIA, 1
OraDatabase.Parameters("TIPOLOGIA").ServerType = 2
OraDatabase.Parameters.Add "err_code", 0, 2
OraDatabase.Parameters("err_code").ServerType = 2
OraDatabase.Parameters.Add "DELEGA", DELEGA, 2
OraDatabase.Parameters("DELEGA").ServerType = 2
OraDatabase.Parameters.Add "APPRCASSA", APPRCASSA, 2
OraDatabase.Parameters("APPRCASSA").ServerType = 2
OraDatabase.Parameters.Add "PROSSIMA", PROSSIMA, 2
OraDatabase.Parameters("PROSSIMA").ServerType = 1
2 STEP
codice:
'--------------------------------------------
' launch oracle stored procedure
'--------------------------------------------
SQL = "declare err_code number; "
SQL = SQL & "Begin :err_code := SIOFG501_TROVA_PROSSIMO( " & _
":CODAZ, :APPROVATORE, :TIPOLOGIA, :DELEGA, " & _
":APPRCASSA, :PROSSIMA); end;"
OraDatabase.DbExecuteSQL SQL
RETCODE = OraDatabase.Parameters("err_code")
DELEGA = OraDatabase.Parameters("DELEGA")
APPRCASSA = OraDatabase.Parameters("APPRCASSA")
PROSSIMA = OraDatabase.Parameters("PROSSIMA")
3 STEP
codice:
'--------------------------------------
' distroing parameters
'--------------------------------------
For i = OraDatabase.Parameters.Count to 1 step -1
OraDatabase.Parameters.Remove i - 1
Next
Come potete vedere sono abbastanza intuitivi.
Nel primo si setta i paramentri necessari per la funzione, nel secondo invoca la function e nel terzo distrugge i parametri.
Il mio quesito verte sul 1 STEP.
Come si può vedere vi sono, per ogni parametro oggetto della function, una coppia di righe ciascuna.
Nella prima riga di ciascuna coppia viene aggiunto il paramentro mediante il metodo ADD; nella seconda viene specificato il tipo di dato (ServerType).
A fronte di quanto ho potuto constatare da ricerche fatte online che invocano function Oracle, sono giunto a queste conclusioni.
1)OraDatabase.Parameters.Add "CODAZ", CODAZ, 1 <-- subito dopo l'ADD vengono specificati il nome della variabile, la variabile stessa e se questa è di input o output (1 = input; 2 = output).
2)OraDatabase.Parameters("CODAZ").ServerType = 1 <-- La specifica del ServerType varia a seconda del tipo di dato (1 = char o varchar2; 2 = number).
Quindi nella coppia:
codice:
OraDatabase.Parameters.Add "CODAZ", CODAZ, 1
OraDatabase.Parameters("CODAZ").ServerType = 1
viene stabilito che il parametro CODAZ è un parametro di input(1 prima riga) di tipo char(1 seconda riga).
Mentre nella coppia:
codice:
OraDatabase.Parameters.Add "DELEGA", DELEGA, 2
OraDatabase.Parameters("DELEGA").ServerType = 2
viene stabilito che il parametro DELEGA è un parametro di output(2 prima riga) di tipo number(2 seconda riga).
Per quanto riguarda l'err_code:
codice:
OraDatabase.Parameters.Add "err_code", 0, 2
OraDatabase.Parameters("err_code").ServerType = 2
viene stabilito che il parametro err_code è un parametro di output (2 prima riga) di tipo number(2 seconda riga).
Piaciuta l'analisi tracciata? Penso sia abbastanza chiara...
Quello che chiedo, se magari qualcuno era già a conoscenza di questa sintassi procedurale, se quello che ho stilato, è quello che realmente ho intuito, oppure se ho scritto una serie di baggianate!!!
:)