PB 9 动态SQL sql字符串长度限制请教

youlong34 2011-12-06 11:13:38
给我大侠帮帮忙 我现在用PB 9使用动态SQL 组装的SQL执行字符串很长大概有1000多字符,该组装的SQL字符串直接在plsql中执行没有问题,通过PB动态SQL执行报无效的操作符,应该是字符串长的问题影响的,但是不知道有什么方法解决,希望大家帮帮忙。大致代码如下:
string ls_sql
long ll_row
string ERRORS, sql_syntax
string presentation_str, dwsyntax_str

sql= "select to_char(b.st_date,'yyyy.mm.dd') ,dept_dict.dept_name ,sum(views.BED_USED_NUM),~n "+&
"(sum(views.BED_USED_NUM) + (sum(b.ADM_OUTP_NUM)+sum(b.FROM_OTHER_DEPT_NUM)+sum(b.FROM_OTHER_HOSPITAL_NUM)) ~n"+&
"- (sum(b.DISCHARGE_NORMAL_NUM)+sum(b.TRANS_DEPT_NUM)+sum(b.TRANS_HOSPITAL_NUM)+sum(b.DIED_NUM))) jss,sum(b.BED_USED_NUM) bs ~n"+&
",sum(b.ADM_OUTP_NUM),sum(b.FROM_OTHER_DEPT_NUM),sum(b.FROM_OTHER_HOSPITAL_NUM),sum(b.DISCHARGE_NORMAL_NUM), ~n"+&
"sum(b.TRANS_DEPT_NUM),sum(b.TRANS_HOSPITAL_NUM),sum(b.DIED_NUM) ~n"+&
"from DEPT_ADT_DAY b, ~n"+&
"(select a.st_date+1 sd,a.* from DEPT_ADT_DAY a ~n"+&
"where a.st_date >= to_date('2011.11.04','yyyy.mm.dd') ) views ,dept_dict ~n"+&
"where views.sd = b.st_date ~n"+&
"and views.dept_code = b.dept_code ~n"+&
"and views.dept_code = dept_dict.dept_code ~n"+&
"and views.identity = b.identity ~n"+&
"group by to_char(b.st_date,'yyyy.mm.dd'),dept_dict.dept_name ~n"+&
"having (sum(views.BED_USED_NUM) + (sum(b.ADM_OUTP_NUM)+sum(b.FROM_OTHER_DEPT_NUM)+sum(b.FROM_OTHER_HOSPITAL_NUM)) ~n"+&
"- (sum(b.DISCHARGE_NORMAL_NUM)+sum(b.TRANS_DEPT_NUM)+sum(b.TRANS_HOSPITAL_NUM)+sum(b.DIED_NUM))) <> sum(b.BED_USED_NUM) ;"
sql_syntax = trim( sql )
if lower(left(sql_syntax,6)) <> 'select' then
messagebox("提示","本功能只接受Select形式的查询语句,请不要使用update,insert等其他SQL语句!")
return
end if
presentation_str = "style(type=grid)"
dwsyntax_str = SQLCA.SyntaxFromSQL(sql_syntax, presentation_str, ERRORS)
IF Len(ERRORS) > 0 THEN
MessageBox("提示", "创建数据窗口时出现错误: " + ERRORS)
RETURN
END IF
dw_4.Create( dwsyntax_str, ERRORS)
IF Len(ERRORS) > 0 THEN
MessageBox("提示", "创建数据窗口时出现错误: " + ERRORS)
RETURN
END IF
dw_4.settransobject( sqlca ) ;
dw_4.retrieve() ;
...全文
600 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
LamarChen 2011-12-06
  • 打赏
  • 举报
回复
你的每一列最好加上别名比较好
select to_char(b.st_date,'yyyy.mm.dd') st_date
LamarChen 2011-12-06
  • 打赏
  • 举报
回复
用存储过程代替试试。
dw_4的datawindow的数据源使用该存储过程
yyoinge 2011-12-06
  • 打赏
  • 举报
回复
1000 多不算多, 应该不是长度问题
fm20027 2011-12-06
  • 打赏
  • 举报
回复
在你的sql语句中为何要加~n,不要加!!!

611

社区成员

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

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