2013-12-12 7 views
5

예외가 발생하면 프로 시저에서 오류 메시지를 반환하고 싶습니다. SQL Server에서는 Error_Number() 및 Error_Message()를 선택합니다. 내가 FirebirdSqlFirebirdSql에서 프로 시저에서 예외 메시지를 반환하는 방법

에서 그것을 할 것입니다 방법
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

당신 수 간단하지 캘리포니아 예외가 발생하면 호출자에게 거품이 생깁니다. –

+0

메시지 및 오류 코드의 서식을 지정하려고합니다. 그것의 인트라넷 웹 응용 프로그램에 대한 – edepperson

답변

4

불행히도 당신은이 PSQL에서 취득하실 수 없습니다로서, 클라이언트 측에서 그렇게해야합니다. (: 다음 알파 릴리스 깰 수있는 링크 경고) :

Firebird 4 Alpha 1 release notes, section System Function RDB$ERROR()를 참조하십시오 2017

에 출시 될 예정이다 파이어 버드 사에 대해 구현 된 파이어 버드 추적기,의 feature request있다

함수 RDB$ERROR()은 PSQL 오류 컨텍스트를 입력으로 사용하고 은 활성 예외의 특정 컨텍스트를 반환합니다. 범위는 이며 PSQL의 예외 처리 블록 컨텍스트에 한정됩니다. 예외 처리 블록 외부에서 RDB$ERROR은 항상 NULL을 포함합니다.

반환 값의 유형은 컨텍스트에 따라 다릅니다.

구문 규칙

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

[..]

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

글쎄, 나는 당신의 올바른 대답이 아니 었 으면 좋았지 만, 그것이 지금부터, 나는 당신에게 그것에 대한 크레딧을 줄거야 – 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