pl/sql中在where in()子句里怎么使用字符串变量来传递查询条件?

CSDN - 专家门诊 -
主  题:
请问pl/sql中在where in()子句里怎么使用字符串变量来传递查询条件?
作  者: web_gus (penny)
信 誉 值: 100
所属论坛: Oracle 开发
问题点数: 100
回复次数: 5
发表时间: 2004-11-25 18:52:08
create or replace procedure test1(  i_miseCode   in  varchar2, o_totalCount out number) is
   
begin
o_totalcount:=0;
 
          SELECT count(*)into(o_totalCount) FROM GCM_SHOHIN
            WHERE MISE_CD IN(i_miseCode) ;  
  
end test1;
输入参数i_miseCode='1001','1002'等多个条件,现在只有输入1个条件时正确,并且不能带引号,如果输入2个以上的时候就会出错怎么回事?

回复人: web_gus(penny) ( ) 信誉:100 2004-11-25 18:55:46 得分:0
 
up

Top
回复人: lialin(阿林) ( ) 信誉:99 2004-11-25 18:58:14 得分:20
 
你用动态语句来实现就好了!
  v_sql:='SELECT count(*)  FROM GCM_SHOHIN WHERE MISE_CD IN('||i_miseCode||')';
  exec v_sql into _totalcount;


Top
回复人: web_gus(penny) ( ) 信誉:100 2004-11-25 19:23:17 得分:0
 
谢谢阿林,我同事本来是这么写的,可是老板不让用动态语句,所以他才修改成这样的,我负责测试,现在这样不知道怎么才能实现啊,他想用substring,循环取子串,感觉太麻烦,不知有没有更好的方法?  SELECT count(*)into(o_totalCount) FROM GCM_SHOHIN
            WHERE MISE_CD IN(i_miseCode) ;  
这样写错在哪里啊?

Top
回复人: zmgowin(隐者(龙祖宗)) ( ) 信誉:100 2004-11-25 19:38:08 得分:80
 
将语法改改
create or replace procedure test1(  i_miseCode   in  varchar2, o_totalCount out number) is
begin
         SELECT count(*) into totalCount FROM GCM_SHOHIN
            WHERE instr(i_miseCode,MISE_CD)>0; 
end test1;

测试的时候要用这种结构,如:
exec test1('''1'',''2''',:b)
不要直接输入'1','2'


Top
回复人: web_gus(penny) ( ) 信誉:100 2004-11-26 8:39:16 得分:0
 
非常感谢zmgowin(隐者(龙祖宗))

Top

该问题已经结贴 ,得分记录: lialin (20)、 zmgowin (80)、

你可能感兴趣的:(sql)