2017-10-19 17 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;