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

oracle存储过程将clob大字段分开存入到新表中

2016-06-29 15:53 309 查看
create or replace PROCEDURE AUTHORIZESAVE AS

v_ID varchar2(1000);
v_MANDATESCOPE clob;
av_split varchar2(2) := ';';
v_length number;
v_start NUMBER;
v_index NUMBER;
v_str varchar2(1000);

BEGIN
DECLARE CURSOR myCusor IS
SELECT ID ,ITEM_MANDATESCOPE FROM tlk_P_Announcements WHERE  ITEM_MANDATESCOPE IS NOT NULL;
BEGIN
OPEN myCusor;

LOOP
FETCH myCusor INTO v_ID,v_MANDATESCOPE;
--游标取不到数据则退出
EXIT WHEN myCusor%NOTFOUND;
v_MANDATESCOPE := replace(v_MANDATESCOPE,',',';');
v_length := LENGTH(v_MANDATESCOPE);
--v_length number:=LENGTH(v_MANDATESCOPE);
v_start :=1;
v_index :=0;
v_str :='';
IF INSTR(v_MANDATESCOPE ,av_split) >0 THEN
WHILE(v_start <= v_length)
LOOP
v_index := INSTR(v_MANDATESCOPE, av_split, v_start);

IF v_index = 0
THEN
v_str :=SUBSTR(v_MANDATESCOPE, v_start);
v_start := v_length + 1;
ELSE
v_str :=SUBSTR(v_MANDATESCOPE, v_start, v_index - v_start);
v_start := v_index + 1;
END IF;
INSERT INTO TLK_MANDATESCOPE(ID,DATAID,AUTHORITYID) VALUES(sys_guid(),v_ID,v_str);
END LOOP;
ELSE
INSERT INTO TLK_MANDATESCOPE(ID,DATAID,AUTHORITYID) VALUES(sys_guid(),v_ID,v_MANDATESCOPE);
END IF;

END LOOP;
CLOSE myCusor;
END;
--提交
COMMIT;
END AUTHORIZESAVE;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: