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

d'erreur à la ligne 7: PL/SQL: Déclaration ignoréCréez une fonction avec une structure de boucle qui renvoie Smith comme htimS. En utilisant une structure en boucle. Pour pl/sql sur Oracle Application

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

Qu'est-ce qu'une question? Une note de côté: il y a une boucle sans fin dans votre fonction, elle ne finit jamais. – krokodilko

Répondre

0

Si vous désirez une fonction, pourquoi coder en dur ces valeurs ?. Une fonction générale peut être la suivante.

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 

Note: Oracle a une fonction REVERSE qui est en situation irrégulière.

0

Une autre option pour votre considération:

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;