在Oracle过程中替换字符串

Ich*_*shi 2 sql oracle plsql stored-procedures

我有一个关于oracle程序的问题,因为我是sql语言的新手:D,这是我的查询

CREATE OR REPLACE PROCEDURE MONDESINT.UPDATECOADESCRIPTION IS

DESCRIPT MONDES_MSTR_CHART_OF_ACCOUNT.NAMA_AKUN%type;

BEGIN

    FOR SATU IN (select NO_AKUN, NAMA_AKUN 
                from mondes_mstr_chart_of_account 
                 where NO_AKUN LIKE '4-1-200-2-03-000%') 
    LOOP
        select REPLACE(NAMA_AKUN,SUBSTR(NAMA_AKUN,0,33),'Utang-Dana Deposit-USD') 
        INTO DESCRIPT 
        from mondes_mstr_chart_of_account 
        where NO_AKUN = '4-1-200-2-03-0009';

        update mondes_mstr_chart_of_account 
        set NAMA_AKUN = DESCRIPT 
        where NO_AKUN = '4-1-200-2-03-0009';
    END LOOP;

END UPDATECOADESCRIPTION;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我会替换表中列中的一些字符串.列名是"NAMA_AKUN",我将取代NAMA_AKUN,其中NO_AKUN喜欢'4-1-200-2-03-000%'.在上面的代码中,我尝试了一个NO_AKUN ='4-1-200-2-03-0009'的记录.

select REPLACE(NAMA_AKUN,SUBSTR(NAMA_AKUN,0,33),'Utang-Dana Deposit-USD') 
  from mondes_mstr_chart_of_account 
 where NO_AKUN = '4-1-200-2-03-0009';
Run Code Online (Sandbox Code Playgroud)

...运行良好,它将取代"DOLLAR AMERICA"为"USD",IE:"BLA BLa Bla-DOLLAR AMERICA-Bla Bla"将改为"BLA BLa Bla-USD-Bla Bla"

注意:"DOLLAR"之前的字符长度对于所有记录都是相等的.

问题是...

当我执行这个程序时,结果将是:"BLA BLa Bla-USD"没有任何下一个美元.预期结果是"BLA BLa Bla-USD-Bla Bla"

任何的想法 ?

APC*_*APC 7

您编写循环的方式将多次更新您的一条记录,因此您无法确定最后应用的精确字符串.也许有一个价值为"BLA BLa Bla-DOLLAR AMERICA"的帐户?

您不需要所有PL/SQL来执行此操作.单个SQL语句就足够了:

    update mondes_mstr_chart_of_account 
    set NAMA_AKUN = replace(NAMA_AKUN, 'DOLLAR AMERICA', 'USD')  
    where NO_AKUN = '4-1-200-2-03-0009';
Run Code Online (Sandbox Code Playgroud)

它更简单,性能更高,也更正确.您可以将该语句嵌入存储过程中,并根据您的要求进行参数化.