入参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都不对
展开
 我来答
流浪云风
2012-09-06 · TA获得超过4315个赞
知道大有可为答主
回答量:1119
采纳率:69%
帮助的人:928万
展开全部
看你的语法像是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;
更多追问追答
追问
大哥 如果把多条结果集放入游标中,而不是v_Ids中,应该怎么写?
还有个问题可不可以将传进来得字符串根据“,”拆分,组成一个新的变量放入in()中?
追答
举个例子,如果语句时select * from ...,需要定义一个记录集,用来装所有的字段,
需要在begin之前声明,rec_ids TABLE%rowtype;
然后使用方式和上面的例子一样
EXECUTE IMMEDIATE v_Sql
INTO rec_ids;

至于你说的用“,”分割的,可以自定义一个数组,用户放置拆分后的字符串,但是没有办法使用in了,因为你并不知道会拆分成几个。这样的话就需要使用循环,每一个字符串作为一个条件来查一次。这样效率不高。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式