1.建立存放字符串的数组类型
create or replace type Type_bind as table OF VARCHAR2(4000)
2.建立将字符串转成数组然后返回给Type_bind函数。
CREATE OR REPLACE FUNCTION F_PUB_BIND_IN(p_bind IN VARCHAR2)
RETURN TYPE_BIND AS
/*
创建时间:2008-8-26
运行周期:
涉及的表:
函数简述:
为了带IN的条件,使用绑定变量, 把字符串转成表类型
入参为()中的值,如:(1,2,3,4)则传入'1,2,3,4'
SELECT * FROM TABLE(F_PUB_BIND('66561000,62693920')) 也可调用
修改历程:
1.
*/
--往入参的后面加入逗号,便于分割
v_SqlStr LONG DEFAULT p_bind || ',';
--中间变量
v_Tmp NUMBER;
--分割后的值
v_Data TYPE_BIND := TYPE_BIND();
BEGIN
LOOP
v_Tmp := INSTR(v_SqlStr, ',');
EXIT WHEN(NVL(v_Tmp, 0) = 0);
--扩展数组大小
v_Data.EXTEND;
/* dbms_output.put_line(v_Data.COUNT);*/
v_Data(v_Data.COUNT) := to_number(SUBSTR(v_SqlStr, 1, v_Tmp - 1));
v_SqlStr := SUBSTR(v_SqlStr, v_Tmp + 1);
END LOOP;
RETURN v_Data;
END F_PUB_BIND_IN;
3.实现绑定的语法。
UPDATE DW.TASK_SMS_LIST P
SET P.STATE = 'X'
WHERE P.SMS_SEQ_ID in
(select COLUMN_VALUE
from the(select cast(F_PUB_BIND_IN(V_SMS_SEQ_ID) as type_bind)
from dual));
V_SMS_SEQ_ID 如'1,2,3,4..'格式