2013-12-12 18 views
5

Bir istisna olduğunda hata mesajını bir prosedürden geri göndermek istiyorum. SQL Server'da Error_Number() ve Error_Message() seçersiniz. Ben firebirdsqlFirebirdSql'de, yordamdan istisna mesajının nasıl döndürüleceği

bunu yapacağını nasıl
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

Yapabilirsin basitçe değil ca istisnayı tikley, arayan kişiye kabarcıklar. –

+0

İleti ve hata kodunu biçimlendirmek istiyorum. Onun bir intranet web uygulaması için – edepperson

cevap

4

Maalesef PSQL yılında almayı mümkün değil gibi istemci tarafında bunu yapmak gerekecektir. (: Bir sonraki alfa sürümü ile bozabilir bağlantıyı uyarı):

Firebird 4 Alpha 1 release notes, section System Function RDB$ERROR() Bkz 2017

yılında piyasaya sürülmesi beklenen Firebird 4 için uygulamaya konmuştur Firebird izleyici, bir feature request vardır

RDB$ERROR() işlevi, giriş olarak bir PSQL hata bağlamı alır ve , etkin özel durumun özel bağlamını döndürür. Kapsamı, PSQL'deki istisna işleme bloğu bağlamıyla sınırlı 'dir. İstisna işleme bloğu dışında, RDB$ERROR her zaman NULL içerir.

Dönüşün türü, içeriğe göre değişir.

sözdizimi kuralları

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

[..]

Örnek

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

Eh, eminim senin doğru cevabı değildi, ama şimdi olduğu için, bunun için size kredi vereceğim – 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