如題,PB里面針對有回傳值的動態SQL能進行游標嵌套嗎,如果可以應該怎么寫,都是declare xxx dynamic cursor for sqlsa嗎?
uj5u.com熱心網友回復:
public function integer uf_selectinto (string as_sql, ref any a_parm[], transaction ltrans_1);string Stringvar, Sqlstatement
integer i,Intvar,li_NumOutputs
Long LongVar
Sqlstatement = as_sql
PREPARE SQLSA FROM :Sqlstatement using ltrans_1;
if ltrans_1.sqlcode=-1 then goto e
DESCRIBE SQLSA INTO SQLDA ;
if ltrans_1.sqlcode=-1 then goto e
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
if ltrans_1.sqlcode=-1 then goto e
OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;
if ltrans_1.sqlcode=-1 then goto e
FETCH my_cursor USING DESCRIPTOR SQLDA ;
if ltrans_1.sqlcode=-1 then goto e
li_NumOutputs=SQLDA.NumOutputs
for i=1 to li_NumOutputs
CHOOSE CASE SQLDA.OutParmType[i]
CASE TypeString!
Stringvar = GetDynamicString(SQLDA, i)
a_parm[i]=Stringvar
CASE TypeInteger!,TypeLong!,TypeByte!,TypeUInt!,TypeUInt!,TypeULong!
Intvar = GetDynamicNumber(SQLDA, i)
a_parm[i]=Intvar
CASE TypeLongLong!,TypeDecimal!,TypeReal!,TypeDouble!
Longvar = GetDynamicDecimal(SQLDA, i)
a_parm[i]=Longvar
case Typedate!
a_parm[i]=GetDynamicDate (SQLDA, i)
case typedatetime!
a_parm[i]=GetDynamicDateTime (SQLDA, i)
case typetime!
a_parm[i]=GetDynamicTime(SQLDA, i)
END CHOOSE
next
CLOSE my_cursor ;
if ltrans_1.sqlcode=-1 then goto e
return li_NumOutputs
e:
return -1
end function
uj5u.com熱心網友回復:
//呼叫
any la_parm[]
if uf_selectinto('select 1,2 ',ref la_parm[],sqlca)=-1 then
messagebox('',sqlca.sqlerrtext)
else
messagebox('',la_parm[1])
end if
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/26426.html
標籤:數據庫相關
