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"
任何的想法 ?
您编写循环的方式将多次更新您的一条记录,因此您无法确定最后应用的精确字符串.也许有一个价值为"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)
它更简单,性能更高,也更正确.您可以将该语句嵌入存储过程中,并根据您的要求进行参数化.
| 归档时间: |
|
| 查看次数: |
4135 次 |
| 最近记录: |