Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Получить внятное сообщение об ошибке в DB2. / 5 сообщений из 5, страница 1 из 1
20.07.2012, 10:42
    #37886502
DB2NBie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить внятное сообщение об ошибке в DB2.
Здравствуйте.
Не подскажете, как получить сообщение об ошибке внутри процедуры на SQL PL?
Вариант с получением SQLCODE, SQLSTATE - абсолютно не информативен.
Хотелось бы получить и сохранить все сообщение типа SQLERRMessage.
...
Рейтинг: 0 / 0
20.07.2012, 12:46
    #37886827
xz321
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить внятное сообщение об ошибке в DB2.
Опиши подробнее чем не устраивает SQLCODE? Ты собираешься парсить сообщение об ошибки для того что бы проводить его лингвистический анализ?
...
Рейтинг: 0 / 0
20.07.2012, 13:51
    #37886994
DB2NBie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить внятное сообщение об ошибке в DB2.
Да.
1. Хочется иметь не просто код ошибки, а описание
2. Хочется иметь ссылку на код строки и операцию вызвавшую ошибку.

Ошибки будут логироваться, а как потом разбирать логи типа: ошибка выполнения процедуры -42602 в процедуре на > 1000 строк ?
Да, конечно, можно потом найти по справочнику - значение и предположить в каком месте и что могло произойти.
Но это абсолютно неудобно.
...
Рейтинг: 0 / 0
20.07.2012, 15:45
    #37887237
Roman Pankov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить внятное сообщение об ошибке в DB2.
Ручками. Как вариант:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
declare LSTEP varchar(512) ccsid 1025 default '';
declare LSQLCODE integer default 0;
declare LSQLSTATE char(5) default '00000';
declare LTEXT varchar(1024) ccsid 1025 default '';

declare exit handler for sqlexception
MYPROC_EXIT: begin
  /* получаем информацию об ошибке */
  get diagnostics condition 1
    LSQLCODE = db2_returned_sqlcode,
    LSQLSTATE = returned_sqlstate,
    LTEXT = message_text;
  /* формируем сообщение */
  set LTEXT = LTEXT || ' ' || LSTEP || ', SQLSTATE = ' || LSQLSTATE || '.';
  /* вылетаем */
  resignal sqlstate '58023' set message_text = LTEXT;
end MYPROC_EXIT;

...

set LSTEP = 'Делаем то';

...

set LSTEP = 'Делаем сё';

...

set LSTEP = 'Делаем пятое';

...

set LSTEP = 'Делаем десятое';

...
...
Рейтинг: 0 / 0
23.07.2012, 10:57
    #37888816
DB2NBie
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить внятное сообщение об ошибке в DB2.
Roman Pankov, спасибо. Ваш синтаксис не подошел. Получилось нечто вроде:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
CREATE PROCEDURE TEST_ERR
 (OUT ERR_STR VARCHAR(1024)
 ) 
  SPECIFIC "TEST_ERR"
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  EXTERNAL ACTION
  OLD SAVEPOINT LEVEL
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  BEGIN
  DECLARE SQLCODE INTEGER DEFAULT 0;
  DECLARE RETCODE INTEGER DEFAULT 0;
  DECLARE SQLSTATE CHAR(5) DEFAULT '00000';
  DECLARE P_SQLSTATE CHAR(5);
  DECLARE ERR_TEXT VARCHAR(1024) DEFAULT '';
  DECLARE STR_TEXT VARCHAR(1024) DEFAULT '';

 DECLARE EXIT HANDLER FOR SQLEXCEPTION
 
ERR_HANDLER:   BEGIN
  
   GET DIAGNOSTICS EXCEPTION 1
      ERR_TEXT = MESSAGE_TEXT,
	  STR_TEXT = DB2_TOKEN_STRING;

	  SET (RETCODE,P_SQLSTATE)  = (SQLCODE, SQLSTATE ) ;
	   
     SET ERR_STR = 'CODE = '||VARCHAR(SQLCODE)||
                            ' STATE = '||P_SQLSTATE||
		 ' MESS_TEXT = '||STR_TEXT||
		 ' ERR_TEXT = '||ERR_TEXT;
	
  END ERR_HANDLER;
  
  
   SIGNAL SQLSTATE '98000'
        SET MESSAGE_TEXT = 'Êàêàÿ-òî îøèáêà!!!' ;
	
	SET ERR_STR = 'Íåò îøèáîê!';
	
END;

COMMIT;
	
	
CALL TEST_ERR(?);		
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Получить внятное сообщение об ошибке в DB2. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]