存储过程传入参数

发布网友

我来回答

2个回答

热心网友

num1 NUMBER := 181,182;
这句话错了啊!
DECLARE
num1 NUMBER ;
BEGIN
num1:=181; ----181,182 是什么意思? 是要一下子传两个数字进去吗? 这样做不可以的哦?
Pr_d2_delCar(num1);
END;追问181,182就是一下要传2个进去, 怎么才能传得进去??

追答首先你定义的数字型的,数字型是不能有逗号的,
只能用varchar2
其次就算用VARCHAR2传进去的话用静态SQL也是没用的。
静态SQL传两个进去也是没有用的!只会变成 in ('181,182') 而不是 in ('181','182');
唯一的方法就是用动态sql
create or replace procere Pr_d2_delCar(d2_cpkid in varchar2) is
vsql varchar2(4000);
begin
vsql:='delete from D2_HC t where fkpkid in (' ||d2_cpkid||') and hctype=''2'' ';
EXECUTE IMMEDIATE v_sql;
--其余的同理。。。
end

热心网友

可以传进去,存储过程的参数定义成varchar2类型,删除数据时条件判断使用instr()函数:
create or replace procere Pr_d2_delCar(d2_cpkid in varchar2) is
vsql varchar2(4000);
begin
delete from D2_HC t where instr(d2_cpkid,cast(fkpkid as varchar2(10))>0 and hctype='2';

end

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com