2013-12-12 18 views
5

Chcę zwrócić komunikat o błędzie z procedury, gdy wystąpi wyjątek. W SQL Server należy wybrać Error_Number() i Error_Message(). Jak to zrobić w FirebirdSqlW FirebirdSql, jak zwrócić komunikat wyjątku z procedury

SET TERM^; 

CREATE PROCEDURE sprocname 
(id int) 
RETURNS 
(gcode int, errmsg varchar(250)) 
AS 
BEGIN 
    gcode = 0; 
    errmsg = ''; 
    -- do procedure code here 


    WHEN ANY DO 
    BEGIN 
    gcode = gdscode; -- ?? 
    errmsg = ??; 
    END 
    SUSPEND; 
END^ 

SET TERM ;^
+0

może po prostu nie CA Tch wyjątkiem, będzie bańki do dzwoniącego. –

+0

Chcę sformatować wiadomość i kod błędu. Jest to aplikacja internetowa w intranecie – edepperson

Odpowiedz

4

Niestety trzeba będzie to zrobić po stronie klienta, jak w tej chwili nie jest możliwe uzyskanie tego w PSQL. Jest feature request w Firebird Tracker, który został wdrożony dla Firebird 4, który ma zostać wydany w 2017 roku

Zobacz Firebird 4 Alpha 1 release notes, section System Function RDB$ERROR() (UWAGA: link może zerwać z następnej wersji alfa):

Funkcja RDB$ERROR() przyjmuje kontekst błędu PSQL jako dane wejściowe, a zwraca określony kontekst aktywnego wyjątku. Jego zakres to ograniczony do kontekstu bloku obsługi wyjątków w PSQL. Poza blokiem obsługi wyjątków RDB$ERROR zawsze zawiera NULL.

Typ zwracanej wartości zależy od kontekstu.

składni zasady

RDB$ERROR (context) 
context ::= { GDSCODE | SQLCODE | SQLSTATE | EXCEPTION | MESSAGE } 

[..]

Przykład

BEGIN 
    ... 
WHEN ANY DO 
    EXECUTE PROCEDURE P_LOG_EXCEPTION(RDB$ERROR(MESSAGE)); 
END 
+0

Cóż, z pewnością żałuję, że twoja nie była poprawną odpowiedzią, ale ponieważ jest to, na razie, dam ci za to zasługę – edepperson

0
CREATE PROCEDURE ADD_COUNTRY (
    ACountryName COUNTRYNAME, 
    ACurrency VARCHAR(10)) 
AS 
BEGIN 
    INSERT INTO country (country, 
         currency) 
    VALUES (:ACountryName, 
      :ACurrency); 
    WHEN ANY DO 
    BEGIN 
     -- write an error in log 
    IN AUTONOMOUS TRANSACTION DO 
     INSERT INTO ERROR_LOG (PSQL_MODULE, 
          GDS_CODE, 
          SQL_CODE, 
          SQL_STATE) 
     VALUES ('ADD_COUNTRY', 
       GDSCODE, 
       SQLCODE, 
       SQLSTATE); 
    -- Re-throw exception 
    EXCEPTION; 
    END 
END 

http://www.firebirdsql.org/file/documentation/reference_manuals/fblangref25-en/html/fblangref25-psql-handleexceptions.html