您的位置:首页 > 数据库 > Oracle

防sql注入的oracle函数

2018-02-01 11:58 351 查看
CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);

CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)

    RETURN str_split 

    PIPELINED

AS

    str1 varchar2(4000) := replace(p_string,'''','');  -- 去掉单引号

    v_length   NUMBER := LENGTH(str1);

    v_start    NUMBER := 1;

    v_index    NUMBER;

BEGIN

    WHILE(v_start <= v_length)

    LOOP

        v_index := INSTR(str1, p_delimiter, v_start);

        IF v_index = 0

        THEN

            PIPE ROW(SUBSTR(str1, v_start));

            v_start := v_length + 1;

        ELSE

            PIPE ROW(SUBSTR(str1, v_start, v_index - v_start));

            v_start := v_index + 1;

        END IF;

    END LOOP;

    RETURN;

END splitstr;

-- 测试

select 字段  from 表名 where 字段 in (

 select a.column_value fid from (select * from (select * from table(splitstr('++4uu0vtQFyNPvT+pYq5kiOVzh4=,++dn+T66RsuI85VIAGfkcyOVzh4=',',')) t)) a

 ) 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息