PB动态SQL游标嵌套

止战之殇000 2016-07-22 09:15:33
如题,PB里面针对有返回值的动态SQL能进行游标嵌套吗,如果可以应该怎么写,都是declare xxx dynamic cursor for sqlsa吗?
...全文
2097 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
A啦Dbit 2016-07-23
  • 打赏
  • 举报
回复
//调用
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
A啦Dbit 2016-07-23
  • 打赏
  • 举报
回复
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

752

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧