各位高手,oracle 的存储过程接收不确定个数的参数,怎么写?
我写的如下,不知道对不对CREATE OR REPLACE procedure dyanCreateView ( Paramter IN varchar(5) )
AS
BEGIN
    OR REPLACE VIEW scott.zzhView AS SELECT aa FROM scott.zzhTable WHERE aa IN ( Paramter );
END;编译的时候报错,请问高手如何写?

解决方案 »

  1.   

    CREATE OR REPLACE PROCEDURE dyanCreateView(Paramter IN VARCHAR2) AUTHID CURRENT_USER IS
      --传入参数字符串类似:11,22,33
      v_parameter VARCHAR2(2000);
    BEGIN
      v_parameter := '''' || REPLACE(Paramter, ',', ''',''') || '''';
      EXECUTE IMMEDIATE 'scott.zzhView AS SELECT aa FROM scott.zzhTable WHERE aa IN ( ' ||
                        v_parameter || ')';
    END;
      

  2.   

    对了,还有啊,AUTHID CURRENT_USER 的作用是什么?
      

  3.   

    我使用
    EXECUTE dyanCreateView('1','2','3')是报错
    说参数类型或个数不对
      

  4.   

    提示我,下面这一行有错啊
    EXECUTE IMMEDIATE 'scott.zzhView AS SELECT aa FROM scott.zzhTable WHERE aa IN ( ' ||
                        v_parameter || ')';我该怎么办?
      

  5.   

    --改一下
    CREATE OR REPLACE PROCEDURE dyanCreateView(Paramter IN VARCHAR2) AUTHID CURRENT_USER IS
      --传入参数字符串类似:11,22,33
      v_parameter VARCHAR2(2000);
    BEGIN
      v_parameter := '''' || REPLACE(Paramter, ',', ''',''') || '''';
      EXECUTE IMMEDIATE 'CREATE OR REPLACE VIEW scott.zzhView AS SELECT aa FROM scott.zzhTable WHERE aa IN ( ' || v_parameter || ')';
    END;
      

  6.   

    对了,AUTHID CURRENT_USER 是干什么用的呢。我是新手,不知道怎么给分。
    我要借贴,可是给分的时候提示错误  *_*
      

  7.   

    AUTHID CURRENT_USER为按调用者权限执行存储过程。晕~~,你发贴时已定了40分,所以,结贴时最多只能给40分。
      

  8.   

    唐人老师:
    我想oracle中将您上面的方法继续:
    将11,22,33,44,...,..,..,这样不定长度的字符串中找到逗号(,),并截取出来放入数组怎么写存储过程?