oracle儲存過程將clob大欄位分開存入到新表中
阿新 • • 發佈:2019-02-18
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;