2017-10-19 18 views
0
CREATE OR REPLACE FUNCTION letter_reverse 
    (char_string IN VARCHAR2) 
    RETURN VARCHAR2 IS 
    v_rev_stg VARCHAR2 := 'htimS'; 
BEGIN 
    LOOP 
    rev_stg := SUBSTR(rev_stg, 'h',5) || SUBSTR(rev_stg, 't',4) || SUBSTR(rev_stg, 'i',3) ||SUBSTR(rev_stg, 'm',2) || SUBSTR(rev_stg, 'S',1); 
    END LOOP; 
END; 

錯誤PL/SQL在第7行:PL/SQL:語句被忽略用循環結構創建一個函數,該函數返回Smith作爲htimS。使用循環結構。有關Oracle應用

5. BEGIN 
6. LOOP 
7.  rev_stg := SUBSTR(rev_stg, 'h',5) || SUBSTR(rev_stg, 't',4) || SUBSTR(rev_stg, 'i',3) ||SUBSTR(rev_stg, 'm',2) || SUBSTR(rev_stg, 'S',1); 
8. END LOOP; 
9. END; 
+1

什麼是一個問題嗎?一個側面說明:,你的功能有一個無限循環,它永遠不會結束。 – krokodilko

回答

0

如果你想要一個功能,爲什麼硬編碼的價值?一般功能可以如下。

CREATE OR REPLACE FUNCTION letter_reverse 
    (char_string IN VARCHAR2) 
    RETURN VARCHAR2 IS 
    v_rev_stg VARCHAR2(20) := NULL; 

BEGIN 
    for i in reverse 1..length(char_string) --loop through the length of string backwards. 
    LOOP 
     v_rev_stg := v_rev_stg||SUBSTR(char_string,i,1) ; -- append elements to v_rev_stg 
    END LOOP; 

    RETURN v_rev_stg; 
END; 

/

select letter_reverse('Smith') reversed FROM DUAL; 
REVERSED 
-------- 
htimS 

注:甲骨文確實有被無證一REVERSE功能。

0

爲您考慮另一種選擇:

DECLARE 
    l_string VARCHAR2 (100) := '?taerg LQS/LP t''nsI'; 
BEGIN 
    DBMS_OUTPUT.put_line (
     UTL_RAW.cast_to_varchar2 (
     UTL_RAW.reverse (UTL_RAW.cast_to_raw (l_string)))); 
END;