不能直接这样写了,你是用游标还是into语句
因为在过程中是不能直接用select语句这样操作!
我想如果是游标的话就可以直接操作了,通过传递一个参数来解决!
如:
  cursor c1 is select * from t_shoukp where p_cxh in (:CXH);
  open c1(cxh);

解决方案 »

  1.   

    select * from t_shoukp where instr(','||p_cxh||',',cxh)>0; 传入参数格式 ',DH010003,DH010004,DH010005,'
      

  2.   

    sorry,写反了select * from t_shoukp where instr(cxh,','||p_cxh||',')>0; 
      

  3.   

    v_sql='select * from t_shoukp where p_cxh in ('|| cxh ||')'
    现在是 他是在V_sql中!
      

  4.   

    create or replace procedure proc_demo(cxh varchar2) AS
    cursor a is select * from  t_kepdjdm;
    CURSOR b is select * FROM t_chexdm;
      v_sql1 varchar2(32767);
      v_sql2 VARCHAR2(32765);
      i number;begin
      v_sql1:='create or replace view V_HCsptj as select a.P_cxh 航次,';
       v_sql2:=' union select  ''总计'' p_cxh,';
        for a_temp in a loop
            v_sql1:=v_sql1||' sum(decode(c.P_dj,'''||a_temp.P_kpdjdm||''',1,0)) '||a_temp.P_kpdj||',';
            v_sql2:=v_sql2||' sum(sum(decode(c.P_dj,'''||a_temp.P_kpdjdm||''',1,0))) '||(a_temp.P_kpdj)||',';
        end loop;
        FOR b_temp IN b LOOP
            v_sql1:=v_sql1||' sum(decode(b.P_cxdm,'''||b_temp.p_cxdm||''',1,0))'||b_temp.P_cx||',';
            v_sql2:=v_sql2||' sum(sum(decode(b.P_cxdm,'''||b_temp.p_cxdm||''',1,0)))'||(b_temp.P_cx)||',';    END LOOP;
             v_sql1:=substr(v_sql1,1,length(v_sql1)-1)||' from t_chuanq a  left join  t_shoucp b ON b.P_CXH=a.P_CXH left join t_shoukp c ON c.P_CXH=a.P_CXH where a.p_cxh in ('|| cxh ||') group by a.P_cxh';
             v_sql2:=substr(v_sql2,1,length(v_sql2)-1)||' from t_chuanq a  left join  t_shoucp b ON b.P_CXH=a.P_CXH left join t_shoukp c ON c.P_CXH=a.P_CXH  where a.p_cxh in ('|| cxh ||') group by a.P_cxh';
             v_sql1:=v_sql1|| v_sql2;                                                                                                                       instr(cxh,','||p_cxh||',')>0
    execute immediate v_sql1;
    end proc_demo; EXEC proc_demo('''DH010003','DH010004''');
    我把全不代码都给你看看
      

  5.   

    create or replace type mytabletype as table of number;
    /create or replace function strtab(p_str in varchar2)
    return mytabletype
    as
    lstr varchar2(1000) default p_str||',';
    ln   number;
    ldata   mytabletype:=mytabletype();
    begin
    loop
      ln:=instr(lstr,',');
      exit when (nvl(ln,0)=0);
      ldata.extend;
      ldata(ldata.count):=ltrim(rtrim(substr(lstr,1,ln-1)));
      lstr:=substr(lstr,ln+1);
    end loop;
    return ldata;
    end;
    /SQL> select * from table(cast(strtab('11,12,13') as mytabletype));COLUMN_VALUE
    ------------
              11
              12
              13SQL> create table bb(id varchar2(2),name varchar2(10));Table createdSQL> insert into bb values('11','张三');1 row insertedSQL> insert into bb values('12','李四');1 row insertedSQL> insert into bb values('13','王五');1 row insertedSQL> select * from bb where id in (select * from table(cast(strtab('11,12,13') as mytabletype)));ID NAME
    -- ----------
    11 张三
    12 李四
    13 王五