各位大虾,求教,不胜感激:
 需求要做一个oracle存储过程,该存储过程有1个输入参数,字符串型,该输入参数是动态的。是从界面上取得多个方案的编码汇集成,类似“001-01,001-02”
输出参数是一个输出结果集存储过程里的输出结果集是执行一条sql语句,该sql语句引用到输入参数.即如:
select * from t_hr_cmpShere where fnumber in (动态输入参数)
本人不太了解动态参数如何编写及引用,请各位能帮编写出来或者提供思路,谢谢!

解决方案 »

  1.   

    这涉及到PL/SQL动态SQL
    可以从这方面入手。
      

  2.   


    DECLARE
      V_PARAM VARCHAR2(20);
      V_SQL   VARCHAR2(1000);
      V_COUNT NUMBER;
    BEGIN
      V_PARAM := '101,201';
      V_SQL   := 'SELECT COUNT(*) FROM tabnm t WHERE t.col1 IN ('|| V_PARAM ||')';
    /*  V_SQL   := V_SQL || V_PARAM ||')';*/
      EXECUTE IMMEDIATE V_SQL INTO v_count;
      DBMS_OUTPUT.PUT_LINE(V_COUNT);
    END;
      

  3.   

    create or replace procedure p(num_01 in varchar2(20),num_02 out varchar2(20)) is
    begin
    select * from t_hr_cmpShere where fnumber in num_01;
    end;
    自己学着写,很简单的
      

  4.   


    CREATE OR REPLACE FUNCTION P(V_PARAM VARCHAR2) -- 参数来自界面传入
    RETURN VARCHAR2  -- 返回字符串,你这里符合条件的是SQL语句
    AS
       V_SQL VARCHAR2(1000);
    BEGIN
       V_SQL:= 'select * from t_hr_cmpShere where fnumber in ('''||V_PARAM||''');';
       RETURN V_SQL;
    END;--验证脚本
    DECLARE
      V_STR VARCHAR2(100);
    BEGIN  
      V_STR := P('HELLO');
      DBMS_OUTPUT.put_line(V_STR);
    END;--输出结果
    select * from t_hr_cmpShere where fnumber in ('HELLO');
             如果参数是多个,用分隔符分开,还要先对输入参数进行处理了
      

  5.   

    1 使用dbms_sql包,可以动态绑定变量2 直接拼接字符串,但是需要注意 
      a 长度问题
      b ''单引号的问题,因为是字符串