oracle实现绑定in字符串

来源:互联网 发布:大学java课程设计题目 编辑:程序博客网 时间:2024/06/01 13:49

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..'格式

原创粉丝点击