2017-08-08 62 views
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') 
       end 
       into sifra1 from dual; 
       return sifra1; 

END TEST; 

但是當我嘗試使用該功能在查詢我得到的所有null值作爲輸出。

select test(sifra) from iis.artikli 

這裏有什麼問題?

+1

你需要爲你只檢查大寫字符傳遞大寫。做'從iis.artikli'選擇測試('SIFRA')。還要注意傳遞varchar的單引號。 – Ofisora

+0

@Ofisora我不知道它是否正確,在有結果的情況下進行修改 – Savke

+1

如果解決了這個問題,那就很好。我假定sifra是你作爲參數傳遞的詞。 – Ofisora

回答

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; 

現在工作得很好