当前位置: 代码迷 >> PB >> 急问,sql动态话语,select型的
  详细解决方案

急问,sql动态话语,select型的

热度:190   发布时间:2016-04-29 05:26:19.0
急问,sql动态语句,select型的。
有个函数,需要使用动态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

------解决思路----------------------
引用:
Quote: 引用:

这么写

string ls_Dbsn, ls_field_bh, ls_dbname

DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
PREPARE SQLSA FROM "select max(" + ls_field_bh + ") from " + ls_dbname;
OPEN DYNAMIC my_cursor ;
FETCH my_cursor INTO :ls_Dbsn   ;
CLOSE my_cursor ;


首先感谢版主晚上的回复。我开始也这样修改过,跟版主的一样,但是报语法错误,实在找不到语法哪错了

可以放到pb里面一试


如果不行,用数据窗口来实现,采用动态设置sql的方法,也比较简单
  相关解决方案