急问,sql动态语句,select型的。

北京大丸子 2014-09-22 12:18:51
有个函数,需要使用动态sql语句,如下,其中field_bh,ls_Dbsn,dbname都是参数化的。请问应该怎么写?

select max(field_bh) into :ls_Dbsn from dbname;
...全文
247 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
北京大丸子 2014-10-01
  • 打赏
  • 举报
回复
搞定,结贴 ------------------------------------------------------------------------------- DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ; string sql1 sql1="select max("+field+") from "+dbname; PREPARE SQLSA FROM :sql1; OPEN DYNAMIC my_cursor ; FETCH my_cursor INTO :ls_Dbsn ; CLOSE my_cursor ; -----------------------------------------------
A啦Dbit 2014-09-24
  • 打赏
  • 举报
回复
long l_count string ls_minsdate any la_parm[] //取最小的起始日 ls_sql="select count(1),min(sdate) from validates " if uf_selectinto(ls_sql,la_parm[])<2 then goto e //因为需要返回两个参数 l_count=la_parm[1] ls_minsdate=la_parm[2]
WorldMobile 2014-09-24
  • 打赏
  • 举报
回复
引用 6 楼 jiang396 的回复:
[quote=引用 5 楼 lzp_lrp 的回复:] 这么写 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里面一试[/quote] 如果不行,用数据窗口来实现,采用动态设置sql的方法,也比较简单
A啦Dbit 2014-09-23
  • 打赏
  • 举报
回复
代码多是通用型的,原理都很简单
引用 2 楼 jiang396 的回复:
这种有返回值的,必须用游标吗?没有简单点的办法?
北京大丸子 2014-09-23
  • 打赏
  • 举报
回复
引用 7 楼 xiajinxian 的回复:
代码多是通用型的,原理都很简单
引用 2 楼 jiang396 的回复:
这种有返回值的,必须用游标吗?没有简单点的办法?
没有看到怎样写的sql语句,能不能给点指导,多谢
北京大丸子 2014-09-22
  • 打赏
  • 举报
回复
引用 5 楼 lzp_lrp 的回复:
这么写 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里面一试
WorldMobile 2014-09-22
  • 打赏
  • 举报
回复
这么写 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 ;
A啦Dbit 2014-09-22
  • 打赏
  • 举报
回复
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
北京大丸子 2014-09-22
  • 打赏
  • 举报
回复
版主的语句:
PREPARE SQLSA FROM "select max(field_bh) from dbname" ;
field_bh 和dbname好像不起作用(用引号引起来以后),我用messagebox读:ls_Dbsn ,结果是空白的
引用 3 楼 lzp_lrp 的回复:
[quote=引用 楼主 jiang396 的回复:] 有个函数,需要使用动态sql语句,如下,其中field_bh,ls_Dbsn,dbname都是参数化的。请问应该怎么写? select max(field_bh) into :ls_Dbsn from dbname;
参考以下代码 string ls_Dbsn DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ; PREPARE SQLSA FROM "select max(field_bh) from dbname" ; OPEN DYNAMIC my_cursor ; FETCH my_cursor INTO :ls_Dbsn ; CLOSE my_cursor ; [/quote]
WorldMobile 2014-09-22
  • 打赏
  • 举报
回复
引用 楼主 jiang396 的回复:
有个函数,需要使用动态sql语句,如下,其中field_bh,ls_Dbsn,dbname都是参数化的。请问应该怎么写? select max(field_bh) into :ls_Dbsn from dbname;
参考以下代码 string ls_Dbsn DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ; PREPARE SQLSA FROM "select max(field_bh) from dbname" ; OPEN DYNAMIC my_cursor ; FETCH my_cursor INTO :ls_Dbsn ; CLOSE my_cursor ;
北京大丸子 2014-09-22
  • 打赏
  • 举报
回复
这种有返回值的,必须用游标吗?没有简单点的办法?
引用 1 楼 xiajinxian 的回复:
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

1,072

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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