各位大虾,求教,不胜感激:
需求要做一个oracle存储过程,该存储过程有1个输入参数,字符串型,该输入参数是动态的。是从界面上取得多个方案的编码汇集成,类似“001-01,001-02”
输出参数是一个输出结果集存储过程里的输出结果集是执行一条sql语句,该sql语句引用到输入参数.即如:
select * from t_hr_cmpShere where fnumber in (动态输入参数)
本人不太了解动态参数如何编写及引用,请各位能帮编写出来或者提供思路,谢谢!
需求要做一个oracle存储过程,该存储过程有1个输入参数,字符串型,该输入参数是动态的。是从界面上取得多个方案的编码汇集成,类似“001-01,001-02”
输出参数是一个输出结果集存储过程里的输出结果集是执行一条sql语句,该sql语句引用到输入参数.即如:
select * from t_hr_cmpShere where fnumber in (动态输入参数)
本人不太了解动态参数如何编写及引用,请各位能帮编写出来或者提供思路,谢谢!
可以从这方面入手。
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;
begin
select * from t_hr_cmpShere where fnumber in num_01;
end;
自己学着写,很简单的
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');
如果参数是多个,用分隔符分开,还要先对输入参数进行处理了
a 长度问题
b ''单引号的问题,因为是字符串