入参Id是由","拼接的id字符串,例如'123','345','112'在调试存储过程中时该入参格式怎么写能支持用in()
createorreplaceprocedurep_abc(inpolicyIdvarchar2)isv_idsvarchar2;beginselectidintov_i...
create or replace procedure p_abc (in policyId varchar2)
is
v_ids varchar2;
begin
select id into v_ids from table where id in (policyId );
end;
不要考虑多条结果能不能放入v_ids中,主要是用in来查出符合条件的结果
求大神!
'123','345','112'和123,345,112都不对 展开
is
v_ids varchar2;
begin
select id into v_ids from table where id in (policyId );
end;
不要考虑多条结果能不能放入v_ids中,主要是用in来查出符合条件的结果
求大神!
'123','345','112'和123,345,112都不对 展开
1个回答
展开全部
看你的语法像是oracle ,可是好像有点问题,如果是oracle需要做一些修改,使用动态sql可以实现你要的效果,代码如下:
CREATE OR REPLACE PROCEDURE p_Abc(Policyid IN VARCHAR2) IS
v_Ids VARCHAR2(10);
v_Sql VARCHAR2(500);
BEGIN
v_Sql := 'SELECT Id FROM TABLE WHERE Id IN (' || Policyid || ')';
EXECUTE IMMEDIATE v_Sql
INTO v_Ids;
--使用v_ids代码
END;
CREATE OR REPLACE PROCEDURE p_Abc(Policyid IN VARCHAR2) IS
v_Ids VARCHAR2(10);
v_Sql VARCHAR2(500);
BEGIN
v_Sql := 'SELECT Id FROM TABLE WHERE Id IN (' || Policyid || ')';
EXECUTE IMMEDIATE v_Sql
INTO v_Ids;
--使用v_ids代码
END;
更多追问追答
追问
大哥 如果把多条结果集放入游标中,而不是v_Ids中,应该怎么写?
还有个问题可不可以将传进来得字符串根据“,”拆分,组成一个新的变量放入in()中?
追答
举个例子,如果语句时select * from ...,需要定义一个记录集,用来装所有的字段,
需要在begin之前声明,rec_ids TABLE%rowtype;
然后使用方式和上面的例子一样
EXECUTE IMMEDIATE v_Sql
INTO rec_ids;
至于你说的用“,”分割的,可以自定义一个数组,用户放置拆分后的字符串,但是没有办法使用in了,因为你并不知道会拆分成几个。这样的话就需要使用循环,每一个字符串作为一个条件来查一次。这样效率不高。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询