有个函数,需要使用动态sql语句,如下,其中field_bh,ls_Dbsn,dbname都是参数化的。请问应该怎么写?
select max(field_bh) into :ls_Dbsn from dbname;
------解决思路----------------------
public function integer uf_selectinto (string as_sql, ref any a_parm[]);string Stringvar, Sqlstatement
integer i,Intvar,li_NumOutputs
Long LongVar
Sqlstatement = as_sql
PREPARE SQLSA FROM :Sqlstatement ;
if sqlca.sqlcode=-1 then goto e
DESCRIBE SQLSA INTO SQLDA ;
if sqlca.sqlcode=-1 then goto e
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
if sqlca.sqlcode=-1 then goto e
OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA ;
if sqlca.sqlcode=-1 then goto e
FETCH my_cursor USING DESCRIPTOR SQLDA ;
if sqlca.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 sqlca.sqlcode=-1 then goto e
return li_NumOutputs
e:
return -1
end function
------解决思路----------------------
如果不行,用数据窗口来实现,采用动态设置sql的方法,也比较简单