從Oracle中替換用逗號串接的字串值
Oracle沒有提供Split的功能,原本OWNERS欄位存的是A,C,E,F這樣的值,現在要把A換成LEO_A,B換成LEO_B,以此類推。要透過DB端直接修改(就是要整檔嚕~),有人建議用REPLACE的方式處理,但是因為執行順序的關係,有可能造成錯誤的置換,例如:B換成LEO_B,然後置換E->LEO_E時,會把剛剛的「LEO_B」變成「LLEO_EO_B」,因此我寫了以下的範例,請同事去改一下。
因為只 FOR 整檔用,就沒寫的太漂亮啦~省時間比較重要 XD
DECLARE
CURSOR CSR_POWER IS SELECT OWNERS FROM MY_POWER WHERE SEQ = '6';
RS_POWER CSR_POWER%ROWTYPE;
I INTEGER;
RTRN VARCHAR(2000);
BEGIN
OPEN CSR_POWER;
LOOP
FETCH CSR_POWER INTO RS_POWER;
EXIT WHEN CSR_POWER%NOTFOUND;
I := INSTR(RS_POWER.OWNERS, 'A');
IF I > 0 THEN
RTRN := RTRN || 'LEO_A' || ',';
END IF;
I := INSTR(RS_POWER.OWNERS, 'B');
IF I > 0 THEN
RTRN := RTRN || 'LEO_B' || ',';
END IF;
I := INSTR(RS_POWER.OWNERS, 'C');
IF I > 0 THEN
RTRN := RTRN || 'LEO_C' || ',';
END IF;
I := INSTR(RS_POWER.OWNERS, 'D');
IF I > 0 THEN
RTRN := RTRN || 'LEO_D' || ',';
END IF;
I := INSTR(RS_POWER.OWNERS, 'E');
IF I > 0 THEN
RTRN := RTRN || 'LEO_E' || ',';
END IF;
I := INSTR(RS_POWER.OWNERS, 'F');
IF I > 0 THEN
RTRN := RTRN || 'LEO_F' || ',';
END IF;
DBMS_OUTPUT.put_line(RTRN);
END LOOP;
END;
--------
沒什麼特別的~
不過是一些筆記而已