Select语句中使用变量出错
Select 数量*成本
into :money
from 出库明细表
where 单号 in ("A02010001","B02010003");
得到money值为500
问题是:("A02010001","B02010003")中单号(可能的几十个)是由用户选择的,即要变成:
string danhao
danhao=.....//在程序中处理得到
Select 数量*成本
into :money
from 出库明细表
where 单号 in (:danhao);
这样一来money为0
怎么解决这问题?
问题点数:100、回复次数:17Top
1 楼liuhonglan(小小)回复于 2002-09-19 13:17:34 得分 5
查看一下sqlcode=100还是-1,100执行成功但未找到相应数据,-1执行出错Top
2 楼luoyefeng(拒绝日货)回复于 2002-09-19 13:21:48 得分 5
单引号和双引号是有影响的Top
3 楼llitcwl(中国龙)回复于 2002-09-19 13:24:17 得分 10
select ...into....只能处理返回记录只有一条的情况
改成游标或DSTop
4 楼chengjian(程剑)回复于 2002-09-19 13:27:10 得分 15
这样是不行的!
只能是拼SQL
STRING LS_SQL,LS_DH
LS_DH = '11331,121212'
LS_SQL = 'Select 数量*成本
into :money
from 出库明细表
where 单号 in (''' + LS_DH +''')'
EXECUTE LS_SQL USING SQLCA;
Top
5 楼fjzjr(阿如)回复于 2002-09-19 13:27:49 得分 0
返回值为0,
其实danhao变量值为"A02010001","B02010003"
Top
6 楼zhangshunshi(宇轩)回复于 2002-09-19 13:30:31 得分 5
Select 数量*成本
into :money
from 出库明细表
where 单号 = :danhao;Top
7 楼fjzjr(阿如)回复于 2002-09-19 13:30:31 得分 0
哦我写错了select 语句是这样:
Select sum(数量*成本)
into :money
from 出库明细表
where 单号 in ("A02010001","B02010003");
得到money值为500
问题是:("A02010001","B02010003")中单号(可能的几十个)是由用户选择的,即要变成:
string danhao
danhao=.....//在程序中处理得到
Select sum(数量*成本)
into :money
from 出库明细表
where 单号 in (:danhao);
这样一来money为0
怎么解决这问题?
Top
8 楼smilelhh(blue)回复于 2002-09-19 13:31:00 得分 5
这是因为:
Select 数量*成本
from 出库明细表
where 单号 in ("A02010001","B02010003");
这条SELECE语句的返回行多于一行.
只能用
Select sum(数量*成本)
into :money
from 出库明细表
where 单号 in ("A02010001","B02010003");
或者用游标一行行取出来.
Top
9 楼warchild(大成若缺)回复于 2002-09-19 13:36:08 得分 5
cursorTop
10 楼liuhonglan(小小)回复于 2002-09-19 13:37:05 得分 5
我觉得,单号中格式错误Top
11 楼joss(季节...夏至)回复于 2002-09-19 13:40:08 得分 5
怎么有这样要求的客户,
如果是查询出一批记录(与客户输入的一批单号相匹配!)
你可以用循环语句来实现啊!
或者你写成存储过程得了!Top
12 楼ddtid(竹雨)回复于 2002-09-19 13:46:52 得分 10
你那个danhao怎么存储多个单号的?
不会是"A02010001,B02010003"吧
这样到了SQL语句里面就成了
Select sum(数量*成本)
into :money
from 出库明细表
where 单号 in ('A02010001,B02010003');
去取出来当然是0
最简单的处理办法是使用循环
或者先用字符串把danhao 处理成'A02010001','B02010003'的样子(我没有试过,不知道有没有用)
Top
13 楼devil_heart(心魔)回复于 2002-09-19 13:49:00 得分 10
试试这样:
string danhao
string ls_sql
danhao=.....//在程序中处理得到
ls_sql="Select sum(数量*成本) from 出库明细表 where 单号 in ("+danhao+")"
PREPARE sqlsa FROM :ls_sql;
DECLARE dyn_cursor DYNAMIC CURSOR FOR sqlsa;
OPEN DYNAMIC dyn_cursor;
do While sqlca.sqlcode = 0
Fetch dyn_cursor into :money;
Loop
Close dyn_cursor;Top
14 楼flyhot(阳光清晨)回复于 2002-09-19 13:59:37 得分 2
关注!Top
15 楼pufan()回复于 2002-09-19 14:05:53 得分 6
用游标还不如用datastore.
新建datawindow检索参数数组 string array
新建compose fileld 值为 sum(数量*成本 for all)
程序中检索取compose fileld 值即可.Top
16 楼konrong(康尼)回复于 2002-09-19 14:08:57 得分 6
ddtid(竹雨)说的有道理,你要把字符处理成'A02010001','B02010003'的样子才能查到值,象你这样是肯定查不到结果的。Top
17 楼inalover(奇遇)回复于 2002-09-19 14:14:18 得分 6
应该这样用,测试成功
分开写
string danhao1,danhao2
danhao1="A02010001"
danhao1="B02010003"
Select sum(数量*成本)
into :money
from 出库明细表
where 单号 in (:danhao1,:danhao2);
Top




