PL/SQL编程时会有一些常用的处理函数,写成一个包

create or replace
PACKAGE BODY        "PKG_PUBLIC"
IS
    FUNCTION is_exists
    (
    cur IN SYS_REFCURSOR--游标类似于“select 1 from ....where...”
    )
    RETURN BOOLEAN
    IS
        l_dummy   PLS_INTEGER;
        b_bool    BOOLEAN;
    BEGIN
        FETCH cur INTO l_dummy;
        b_bool:=cur%FOUND;
        CLOSE cur;
        RETURN b_bool;
        EXCEPTION
            WHEN OTHERS THEN
                CLOSE cur;
    END is_exists;
   
   
    PROCEDURE log_error
    (
     I_object_name IN VARCHAR2,
     I_code        IN PLS_INTEGER,
     I_msg         IN VARCHAR2
    )
    IS
        PRAGMA AUTONOMOUS_TRANSACTION;
    BEGIN
        INSERT INTO error_log( object_name ,
                               error_code,
                               error_text,
                               created_date,
                               created_by
                              )
        VALUES(I_object_name,
               I_code,
               I_msg,
               SYSDATE,
               USER);
        COMMIT;      
    END log_error;
--------------------------------
    --DESCRIPTION:将以逗号作为分隔符的字符串(末尾没有逗号)转为嵌套表
------------------------------------------
    FUNCTION fun_str_to_tab
    (I_str IN  VARCHAR2)
    RETURN tab_obj_str_to_tab
    IS
    v_tab tab_obj_str_to_tab:=tab_obj_str_to_tab();
    v_counter INTEGER:=0;
    v_str     VARCHAR2(32767):='';
    v_index  INT:=0;
    BEGIN
        v_str:=I_str||',';
        v_index:=INSTR(v_str,',');
   
        WHILE v_index > 0
        LOOP
            v_counter:=v_counter+1;
            v_tab.EXTEND;
            v_tab(v_counter):=obj_str_to_tab(SUBSTR(v_str,1,v_index-1));
            v_str:=SUBSTR(v_str,v_index+1);
            v_index:=INSTR(v_str,',');
        END LOOP;
       
        RETURN v_tab;
    END fun_str_to_tab;
   
 --   将以特定符号作为分隔符的字符串(末尾没有逗号)转为嵌套表
FUNCTION fun_str_to_tab_all
(I_character IN VARCHAR2,
 I_str IN  VARCHAR2
)
RETURN tab_obj_str_to_tab
IS
v_tab tab_obj_str_to_tab:=tab_obj_str_to_tab();
    v_counter INTEGER:=0;
    v_str     VARCHAR2(32767):='';
    v_index  INT:=0;
    BEGIN
        v_str:=I_str||I_character;
        v_index:=INSTR(v_str,I_character);
   
        WHILE v_index > 0
        LOOP
            v_counter:=v_counter+1;
            v_tab.EXTEND;
            v_tab(v_counter):=obj_str_to_tab(SUBSTR(v_str,1,v_index-1));
            v_str:=SUBSTR(v_str,v_index+1);
            v_index:=INSTR(v_str,I_character);
        END LOOP;
       
        RETURN v_tab;
END; 
-- 获取以特定符号作为分隔符的字符串的特定位置的字符(串)。
FUNCTION fun_str_to_tab_part
(I_character IN VARCHAR2,
 I_str IN  VARCHAR2,
 I_NUM IN NUMBER
)
RETURN VARCHAR2
IS
    v_counter INTEGER:=0;
    v_str     VARCHAR2(32767):='';
    v_index  INT:=0;
    v_return VARCHAR2(100) := '';
BEGIN
    v_str:=I_str||I_character;
    v_index:=INSTR(v_str,I_character);
   
    WHILE v_index > 0
        LOOP
            v_counter:=v_counter+1;
            IF v_counter = I_NUM THEN
                v_return:=SUBSTR(v_str,1,v_index-1);
                EXIT;
            END IF;
            v_str:=SUBSTR(v_str,v_index+1);
            v_index:=INSTR(v_str,I_character);
        END LOOP;
    RETURN  v_return;  
END;
/*
md5加密
*/ 
FUNCTION fn_md5 (input_string IN VARCHAR2)
RETURN VARCHAR2
IS
raw_input RAW (128) := UTL_RAW.cast_to_raw (input_string);
decrypted_raw RAW (2048);
error_in_input_buffer_length EXCEPTION;
BEGIN
DBMS_OBFUSCATION_TOOLKIT.md5 (input => raw_input,
checksum => decrypted_raw
);
RETURN LOWER (RAWTOHEX (decrypted_raw));
END;

/*
CLOB字符串的转成数组
*/
FUNCTION fun_clob_to_tab(i_clob clob)
    RETURN tab_obj_str_to_tab
    IS
    v_tab tab_obj_str_to_tab:=tab_obj_str_to_tab();
    v_counter INTEGER:=0;
    v_str     clob;
    v_index  INT:=0;
    BEGIN
        v_str := i_clob;
        dbms_lob.append(v_str,',');
        v_index:=dbms_lob.INSTR(v_str,',');
        WHILE v_index > 0
        LOOP
            v_counter := v_counter+1;
            v_tab.EXTEND;
            v_tab(v_counter) := obj_str_to_tab(dbms_lob.SUBSTR(v_str,v_index-1));
            v_str  := dbms_lob.substr(v_str,dbms_lob.getlength(v_str),v_index+1);
            v_index := dbms_lob.INSTR(v_str,',');
        END LOOP;
       
        RETURN v_tab;
    END fun_clob_to_tab;
END pkg_public;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23065269/viewspace-713967/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23065269/viewspace-713967/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值