替换字符的功能

时间:2017-08-08 05:55:54

标签: plsql oracle11g

我正在尝试创建一个用其他人替换一个字符的新功能:

  CREATE OR REPLACE FUNCTION TEST (sifra in varchar2)  
RETURN  VARCHAR2 AS 
sifra1 varchar2(16);
BEGIN
       select    case  when instr(sifra,'A') >0 then replace(sifra, 'A', '0') 
                 when instr(sifra,'B') >0 then replace(sifra, 'B', '1') 
                 when instr(sifra,'C') >0 then replace(sifra, 'C', '2') 
                 when instr(sifra,'D') >0 then replace(sifra, 'D', '3')
                 when instr(sifra,'E') >0 then replace(sifra, 'E', '4') 
                 when instr(sifra,'F') >0 then replace(sifra, 'F', '5')
                 when instr(sifra,'G') >0 then replace(sifra, 'G', '6')
                 when instr(sifra,'H') >0 then replace(sifra, 'H', '7')
                 when instr(sifra,'I') >0 then replace(sifra, 'I', '8')
                 when instr(sifra,'J') >0 then replace(sifra, 'J', '9')
                 end 
                 into sifra1 from dual;
                 return sifra1;

END TEST;

但是当我尝试在查询中使用该函数时,我将所有null值作为输出。

select test(sifra) from iis.artikli

这里有什么问题?

1 个答案:

答案 0 :(得分:0)

解决了,我没有把它放在其他情况下。

create or replace FUNCTION test (sifra in varchar2)  
RETURN  VARCHAR2 AS 
sifra1 varchar2(16);
BEGIN
       select    case  when instr(sifra,'A') >0 then replace(sifra, 'A', '0') 
                 when instr(sifra,'B') >0 then replace(sifra, 'B', '1') 
                 when instr(sifra,'C') >0 then replace(sifra, 'C', '2') 
                 when instr(sifra,'D') >0 then replace(sifra, 'D', '3')
                 when instr(sifra,'E') >0 then replace(sifra, 'E', '4') 
                 when instr(sifra,'F') >0 then replace(sifra, 'F', '5')
                 when instr(sifra,'G') >0 then replace(sifra, 'G', '6')
                 when instr(sifra,'H') >0 then replace(sifra, 'H', '7')
                 when instr(sifra,'I') >0 then replace(sifra, 'I', '8')
                 when instr(sifra,'J') >0 then replace(sifra, 'J', '9')
                 else sifra
                 end 
                 into sifra1 from dual;
                 return sifra1;

END test;

现在工作得很好