请看看,下面sql语句的错在哪里??

joeok 2002-03-05 02:44:18
我在pb中执行下面语句,正确执行,结果是错的,请问这个该语句如何写??

string v1,v2

v1 = "asdf"

SELECT :v1
INTO :v2
FROM table1
Where (…………)

检查发现,v2的值为“asdf”,而不是所期望的v1列对应的值。

请问各位,这是怎么回事,难道SELECT语句不允许引用变量吗??
...全文
66 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
iltg 2002-03-08
  • 打赏
  • 举报
回复
create table b2(....) as select ... from b1 where(......)
joeok 2002-03-08
  • 打赏
  • 举报
回复
由于原表结构不合理,我更改原结构:
A B C
1 2 3
为:COL1 COL2
A 1
B 2
C 3
做法是先将A,B,C放入一个数组,再将1,2,3放入另一个数组,检索之后,再将二者插入新表,现在,在将值放入数组时出问题:

数组object[]已经赋值,是表的列名;info[]准备存放与之对应的数值

For i=1 to 50
SELECT :object[i]
INTO :info[i]
FROM card
WHERE (…………)

这个语句有错吗??

大家看到了,原表的列比较多,如果用“第三种动态SQL解决”{〔 PS:llitcwl(中国龙)},显然会很复杂,请问各位,有没有更好的办法??

谢谢各位回复!
killerdanny 2002-03-07
  • 打赏
  • 举报
回复
有趣。这样的东西有什么用,如果要复制的话,直接用=不就完了吗!这么麻烦解决一个无用的问题,是不是太孔乙己了
llitcwl 2002-03-07
  • 打赏
  • 举报
回复
天哪,哪有这么用SQL的,这种只能用第三种动态SQL解决,在帮助中写dynamic查查吧。上面的代码要改成:
string ls_var
string ls_col='v1'
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA ;
PREPARE SQLSA FROM "SELECT "+ls_col+" FROM employee" ;
OPEN DYNAMIC my_cursor ;
FETCH my_cursor INTO :ls_var ;
CLOSE my_cursor ;
2000pinbo 2002-03-07
  • 打赏
  • 举报
回复
string v1,v2
v1 = "asdf"
SELECT :v1 INTO :v2 FROM table1 Where (…………)
这个用法等同于 select 'asdf' into :v2 from table where (.....)
肯定为asdf.
如果v1为想取的列名,应用游标
ls_sql="select "+v1+"FROM table1 Where (…………) "
然后执行
记着给点分

fibbery 2002-03-07
  • 打赏
  • 举报
回复
更正:没有INTO :LI_INT
fibbery 2002-03-07
  • 打赏
  • 举报
回复
首先,你的语法没有错误!
在PB的嵌入式SQL语句中,加“:”的标示符PB会认为这是PB程序中的变量!而你将这种标示符写在COL的位置,PB在向数据库传递语句的时候,会把她当做一个常量(相对于数据库说),所以,类似:
select 1
INTO :LI_INT
FROM TB
WHERE ****
当然,你得到的也就是这个常量!
你可以在PB与数据库交互的界面是一下:
select 1
INTO :LI_INT
FROM TB;
你会发现,TB表中有多少行,就会有多少个1。
joeok 2002-03-07
  • 打赏
  • 举报
回复

zhanwei(詹维) :你的这种用法好像行不通,这种用法适用于,没有返回值,我这里有返回值~~

daiwoo_wang(屎太浓):这里v1也是一个变量,真正的列名是“asdf”,这样直接应该不行吧~~

joeok 2002-03-05
  • 打赏
  • 举报
回复
这是我的原问题:数组time_object[]已经赋值,是表的列名;time_info[]准备存放与之对应的数值

For i=1 to 25
SELECT :time_object[i]
INTO :time_info[i]
FROM card
WHERE (…………)

这个语句有错吗??
daiwoo_wang 2002-03-05
  • 打赏
  • 举报
回复
不好意思,按错键了,下面继续:
如果意图是将列V1的值取出放到V2中,应如此写:
SELECT V1 INTO :V2 FROM tablename where ....
daiwoo_wang 2002-03-05
  • 打赏
  • 举报
回复
注意:如果V1是数据表中的列的话,其前面是不能有分号:的,因为在PB的语法中,SQL语句中用加分号表示变量,所以你的意图如果是将V1
zhanwei 2002-03-05
  • 打赏
  • 举报
回复
string ls_sqlstr

ls_sqlstr = "SELECT "+ v1+" INTO :v2 FROM table1 Where (………)"

EXECUTE IMMEDIATE :ls_sqlstr;
zjcxx 2002-03-05
  • 打赏
  • 举报
回复
select v1 into :v2
from table1
where (.....)
konrong 2002-03-05
  • 打赏
  • 举报
回复
:v1 错了
'"+v1+''

401

社区成员

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

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