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;
oracle存储过程将clob大字段分开存入到新表中
最新推荐文章于 2022-10-12 09:57:19 发布