2016-07-20 10 views
0

Ich versuche eine Funktion zu erstellen, die einen Eintrag (ID) nimmt und dann das entsprechende XMLTYPE-Feld für einen bestimmten XML-Wert überprüft und basierend auf dem Ergebnis handle Schwierigkeiten beim Zusammensetzen aller Teile. Ich habe die folgende select-Anweisung, die den XML-Wert wählen funktioniert Ich suche:PLSQL IF/ELSE-Funktion zum Überprüfen des XML-Werts

select x.xmldata.extract('//Fc_curstage/text()').getStringVal() 
from test_data x 
where id = 149; 

und die Funktion, die ich bisher habe, ist:

create or replace 
function get_xmlstatus 
    (p_stage in NUMBER) 
    return VARCHAR2 is 
    v_stage varchar2(20); 

    begin 
    return varchar2 
     IF v_cur_stg = 'INITIAL' THEN 
     -- Create new record in stage 
    v_stage := 'INITIAL 1'; 

    ELSIF v_cur_stg = 'RETURNED' THEN 
     -- Remove any associated records from the stage 
    v_stage := 'Returned 2'; 
    ELSE 
     -- this should raise exception 
    v_stage := 'Blank Expected 3'; 
    END IF; 

Ich bin nicht sicher, wo ich brauche zu erklären dass:

v_cur_stg:=x.xmldata.extract('//Fc_curstage/text()').getStringVal(); 

oder wo ich brauche, um die Select-Anweisung enthält, so dass die Funktion weiß, was mit der ID zu tun, die in die Funktion übergeben wird.

Antwort

1

Versuchen Sie folgendes:

create or replace function get_xmlstatus (p_stage in NUMBER) 
    return VARCHAR2 is 

    v_cur_stage varchar2(20); 
    v_stage varchar2(20); 
begin 

    select x.xmldata.extract('//Fc_curstage/text()').getStringVal() 
    into v_cur_stg 
    from test_data x 
    where id = p_stage; --149; 


    IF v_cur_stg = 'INITIAL' THEN 
     -- Create new record in stage 
    v_stage := 'INITIAL 1'; 

    ELSIF v_cur_stg = 'RETURNED' THEN 
     -- Remove any associated records from the stage 
    v_stage := 'Returned 2'; 
    ELSE 
     -- this should raise exception 
    v_stage := 'Blank Expected 3'; 
    END IF; 

    Return v_stage; 
End;