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

Ошибки будут логироваться, а как потом разбирать логи типа: ошибка выполнения процедуры -42602 в процедуре на > 1000 строк ?
Да, конечно, можно потом найти по справочнику - значение и предположить в каком месте и что могло произойти.
Но это абсолютно неудобно.
...
Рейтинг: 0 / 0
Получить внятное сообщение об ошибке в DB2.
    #37887237
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.
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
Получить внятное сообщение об ошибке в DB2.
    #37888816
DB2NBie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
5 сообщений из 5, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Получить внятное сообщение об ошибке в DB2.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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