2017-06-19 2 views
1
ausgeführt

ich diese gespeicherte Prozedur in Oracle geschrieben haben:zweite Anweisung in Block beginnen wird nicht

CREATE OR REPLACE FUNCTION GET_SOLVER_ID(username_in IN VARCHAR2) 
RETURN NUMBER 
IS 
solver_id number(19); 
system_user_id number(19); 
BEGIN 
SELECT id 
INTO solver_id 
FROM usr_solver 
WHERE username = username_in; 

select ID into system_user_id from USR_USER where USER_TYPE = 'X'; 
solver_id := nvl(solver_id, system_user_id); 
RETURN(solver_id); 
END; 

Wenn ich die Funktion mit Benutzernamen aufrufen, die nicht in der Tabelle existiert usr_solver ich für das Ergebnis null erhalten. Ich erwarte stattdessen system_user_id.
Es scheint, als ob die andere SELECT-Anweisung und NVL-Funktion in begin Block nicht ausgeführt wurde.
Können Sie helfen, ich kann nicht sehen, der Grund, warum ...

Danke,
mismas

+2

wollen Ihre erste Auswahl die NO_DATA_FOUND angehoben haben wird Ausnahme, wenn der Benutzername nicht existiert und die zweite Auswahl nicht ausgeführt wird. Sie müssen diese Ausnahme abfangen und entsprechend behandeln. –

+0

Ich bin überrascht, dass Sie keine Ausnahme 'ORA-01403: keine Daten gefunden' bekommen. – Nitish

+3

@Nitish werden sie nicht, wenn sie die Funktion in einer Select-Anweisung aufrufen. –

Antwort

2

Dies tun sollten, was Sie

CREATE OR REPLACE FUNCTION GET_SOLVER_ID(
     username_in IN VARCHAR2) 
    RETURN NUMBER 
IS 
    some_id NUMBER(19); 
BEGIN 
    BEGIN 
     SELECT id 
     INTO some_id 
     FROM usr_solver 
     WHERE username = username_in; 
    EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
     SELECT ID 
     INTO some_id 
     FROM USR_USER 
     WHERE USER_TYPE = 'X'; 
    END; 
    RETURN(some_id); 
END; 
Verwandte Themen