PB中如何执行SQL语句?

studiovc 2005-07-11 02:56:50
大哥:
在PB6.5中如何如何执行一条复杂的SQL语句?(有子查询的SQL语句)

例:(该SQL在sqlplus中直接运行可以得到正确的结果,但在PB中运行后,好像没有运行一样?)
UPDATE x SET (c,d)=(SELECT c,d FROM y WHERE y.a=x.a AND y.b=x.b) WHERE EXISTS (SELECT c,d FROM y WHERE y.a=x.a AND y.b=x.b)

下面的语句,我知道怎样运行,也可以成功运行,但上面的为什么不行?
CREATE TABLE myline AS SELECT * FROM cline
这一语句,在程序中这样写就可以了:
string mysql;
mysql="CREATE TABLE myline AS SELECT * FROM cline"
EXECUTE IMMEDIATE :mysql;


帮忙! 谢谢!
...全文
1767 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
studiovc 2005-07-11
  • 打赏
  • 举报
回复
谢谢楼上大哥,
问题已经解决,是权限问题,我在PB中连接数据库的用户没有修改表X的权限.
li_d_s 2005-07-11
  • 打赏
  • 举报
回复

string mysql2;
mysql2="UPDATE SET (c,d)=(SELECT c,d FROM y WHERE y.a=x.a AND y.b=x.b) WHERE EXISTS (SELECT 1 FROM y WHERE y.a=x.a AND y.b=x.b)"
EXECUTE IMMEDIATE :mysql2;
If sqlca.sqlcode <> 0 Then
rollback;
MessageBox("错误", sqlca.sqlerrtext);
else
commit;
MessageBox("成功", "执行SQL成功");
End If
....
studiovc 2005-07-11
  • 打赏
  • 举报
回复
怎样看sqlca.sqlerrtext的信息,没有提示出错啊!
就好象运行了该SQL而没有运行commit一样;但我事实是有一条commit语句啊?
下面是完整的程序:
string mysql2;
mysql2="UPDATE SET (c,d)=(SELECT c,d FROM y WHERE y.a=x.a AND y.b=x.b) WHERE EXISTS (SELECT 1 FROM y WHERE y.a=x.a AND y.b=x.b)"
EXECUTE IMMEDIATE :mysql2;
sle_fare_value.Text="OK"

commit;

sle_fare_value.Text="OK2"
lzheng2001 2005-07-11
  • 打赏
  • 举报
回复
sqlca.sqlerrtext的信息是什么,这点很重要呀
studiovc 2005-07-11
  • 打赏
  • 举报
回复
在sql中运行成功啊!

在数据库软件上运行也成功啊!

数据库是Oracle 数据库软件就是sqlplus啊
MINDNET 2005-07-11
  • 打赏
  • 举报
回复
这句话在sql中运行成功吗?
li_d_s 2005-07-11
  • 打赏
  • 举报
回复
同上,检查sqlca.sqlerrtext,还有,如果你是用ODBC的话,嵌套的sql执行可能会有问题,尽量采用专用接口
lzheng2001 2005-07-11
  • 打赏
  • 举报
回复
运行不成功时检查一下sqlca.sqlerrtext的信息,一般可以自己解决问题. 还有就是把SQL语句复制出来,到数据库软件上运行看能否成功

754

社区成员

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

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