powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQL0746N при вызове хп из триггера
25 сообщений из 27, страница 1 из 2
SQL0746N при вызове хп из триггера
    #36075408
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем, здравствуйте.

Помогите плс с проблемкой.
У меня есть триггер который делает следующее:
1) Вызывает хранимку, которая создаёт временную таблицу (так как создать её напрямую из триггера невозможно)
2) Затем триггер заполняет эту табличку
3) Вызывает ещё одну хп, которая переносит данные из временной таблицы в постоянную.

При вызове последней возникает ошибка SQL0723, говорящая о том что в триггере произоше сбой, а в иформации подаёт SQLCODE -746, SQLSTATE 57053.

Полный тескст ошибки:
ERROR [09000] [IBM][DB2/AIX64] SQL0723N An error occurred in a triggered SQL statement in trigger "ALERT.FILESPA". Information returned for the error includes SQLCODE "-746", SQLSTATE "57053" and message tokens "MYSCHEMA.UPDATE_INST_COUN|UPDATE_INST_COUNTE". SQLSTATE=09000

База данных версии 9.5 на AIX64.

Описание ошибки в документации не прояснило суть происходящего.
Подскажите, пожалуйста, что вызывает ошибку и что можно предпринять для её устраниния.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075505
Фотография I_love_MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут причина проблем

- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075512
Фотография I_love_MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простите, вот .
- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075537
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I_love_MSDN, спасибо за ответ.
Эту статью я уже читал, да вот только не смог разобраться.
В User response сказано:
The operation may be successful if retried. Redesign either the application or the routine to avoid the conflict.

Ошибка случается всякий раз, когда срабатывает триггер, так что "The operation may be successful if retried." не актуально.
Мне не совсем понятна природа этого конфликта.
Как нужно изменить процедуру, чтоб конфликт не повторялся?
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075564
Фотография I_love_MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я могу только предположить, что проблема решится, если
1) посмотреть от какого пользователя создалась временная таблица
2) Вызывать select от пользователя из п.1, методом set current sqlid blabla

ЗЫ: неуверен.
- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075589
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Времення таблица создаётся в начале работы триггера -а читается перед его завершением. Тоесть всё происходит в теле одного триггера, следовательно, от одного и того же пользователя.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075603
Фотография I_love_MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PowerEdgeВремення таблица создаётся в начале работы триггера -а читается перед его завершением. Тоесть всё происходит в теле одного триггера, следовательно, от одного и того же пользователя.
Тогда ждем Mark'a.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075653
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I_love_MSDNТогда ждем Mark'a.
Марк, помогите :|
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075659
Фотография I_love_MSDN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вот тут смотрели?
- Абсолют' ный
-посковый робот по MSDN для
- ленивых
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075732
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

PowerEdge,

Покажите схематично тело триггера.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075739
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
I_love_MSDN А вот тут смотрели?

Да. Но я ничего не предпренимал, так как по умолчанию DB2_RESOLVE_CALL_CONFLICT равно YES. А в этом случае : When you set this variable to YES, the default, the database manager strictly enforces the order of execution for accessing tables in procedures called within triggers through the use of temporary tables, as needed - а это как раз мой случай.
Установка DB2_RESOLVE_CALL_CONFLICT в ALL добавляет устранение этой ошибки для table functions, так что менять что-либо нет смысла.
Вопрос всё-ещё открыт.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075758
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinЗдравствуйте.

PowerEdge,

Покажите схематично тело триггера.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE TRIGGER ALERT.FILESPACE_AI_FES
AFTER INSERT ON ALERT.FILESPACE
REFERENCING NEW_TABLE AS NEW_ROWS
FOR EACH STATEMENT MODE DB2SQL
BEGIN ATOMIC	

	CALL MYSCHEMA.CREATE_TEMP_TABLE(); -- CREATES THE TEMP TABLE

	FOR WIZ_STAT AS
		--SELECT CLAUSE GOES HERE		
	DO		
		CALL MYSCHEMA.STORE_INST_COUNTERS_TO_TEMP_TABLE(WIZ_STAT.ALERT_CONFIG_ID, WIZ_STAT.STATUS_ID, WIZ_STAT.ROWS_COUNT); --STORES THE DATA TO THE TEMP TABLE	
	END FOR;
	
	CALL MYSCHEMA.UPDATE_INST_COUNTERS();--COPIES THE DATA FROM TEMP TABLE TO DESTINATION ONE
END;
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075772
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точная версия б.д.:
Instance "DB2" uses "32" bits and DB2 code release "SQL09053" with
level identifier "06040107".
Informational tokens are "DB2 v9.5.301.436", "s081210", "WR21427", and Fix Pack "3a".
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075861
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PowerEdge,

странно...
у вас это выполняется:

db2 -td@ -vf script.sql
Код: plaintext
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.
create table a(i int) in userspace1@
create table b(i int) in userspace1@

create procedure crt_temp
begin
  declare global temporary table session.t(i int) 
  with replace on commit preserve rows not logged;
end@

create procedure ins_temp(pi int)
begin
  insert into session.t(i) values (pi);
end@

create procedure cpy_temp
begin
  insert into b(i)
  select i from session.t;
end@

create trigger a_ais
after insert on a
referencing new table as n
for each statement
begin atomic
  call crt_temp;
  for v1 as 
    select i from n
  do
    call ins_temp(v1.i);
  end for;
  call cpy_temp;
end@

insert into a values  1 , 2 , 3 @
?
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075867
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл:
в начало файла надо это вот вставить:
Код: plaintext
declare global temporary table session.t(i int) with replace on commit preserve rows not logged@
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075921
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark BarinsteinPowerEdge,

странно...
у вас это выполняется:


Да, всё выполняется без ошибок.
Это значит что что-то не так в MYSCHEMA.UPDATE_INST_COUNTERS() ?
Я попробовал убрать её вызов из триггера - отработал без ошибок.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075928
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
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.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
CREATE PROCEDURE WIZARD.UPDATE_INST_COUNTERS
SPECIFIC WIZARD.UPDATE_INST_COUNTERS
BEGIN
	
	DECLARE RAISED_STATUS_ID INTEGER;
	DECLARE SNOOZED_STATUS_ID INTEGER;
	DECLARE CLOSED_STATUS_ID INTEGER;
		
	DECLARE CURRENT_ID INTEGER;
	DECLARE CURRENT_RAIZED_INST_COUNT INTEGER DEFAULT  0 ;
	DECLARE CURRENT_SNOOZED_INST_COUNT INTEGER DEFAULT  0 ;
	
	DECLARE RECALCULATED_RAIZED_INST_COUNT INTEGER DEFAULT  0 ;
	DECLARE RECALCULATED_SNOOZED_INST_COUNT INTEGER DEFAULT  0 ;
	DECLARE RECALCULATED_WIZARD_STATUS INTEGER;
	
	DECLARE AT_END INTEGER;
	
	DECLARE C1 CURSOR FOR	
		SELECT
			ID,
			COALESCE(RAIZED_INST_COUNT,  0 ), 
			COALESCE(SNOOZED_INST_COUNT,  0 )
		FROM
			WIZARD.ALERTCONFIG
		WHERE ID IN (SELECT DISTINCT ALERT_CONFIG_ID FROM SESSION.WIZ_INST_STAT)
		FOR UPDATE OF RAIZED_INST_COUNT, SNOOZED_INST_COUNT, STATUS_ID WITH RS;
		
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET AT_END =  1 ;

	CALL WIZARD.ALERTSTATUS_GET_STATUSES_ID(RAISED_STATUS_ID, SNOOZED_STATUS_ID, CLOSED_STATUS_ID);
		
	OPEN C1;
	
	SET AT_END =  0 ;
	FETCH C1 INTO CURRENT_ID, CURRENT_RAIZED_INST_COUNT, CURRENT_SNOOZED_INST_COUNT;
			
	WHILE AT_END =  0  DO	
		
		SET RECALCULATED_RAIZED_INST_COUNT = CURRENT_RAIZED_INST_COUNT + COALESCE((SELECT SUM(ROWS_COUNT) FROM SESSION.WIZ_INST_STAT WHERE ALERT_CONFIG_ID = CURRENT_ID AND STATUS_ID = RAISED_STATUS_ID),  0 );
		SET RECALCULATED_SNOOZED_INST_COUNT = CURRENT_SNOOZED_INST_COUNT + COALESCE((SELECT SUM(ROWS_COUNT) FROM SESSION.WIZ_INST_STAT WHERE ALERT_CONFIG_ID = CURRENT_ID AND STATUS_ID = SNOOZED_STATUS_ID),  0 );		
				
		IF(RECALCULATED_RAIZED_INST_COUNT >  0 ) THEN 
			SET RECALCULATED_WIZARD_STATUS = RAISED_STATUS_ID;
		ELSEIF RECALCULATED_SNOOZED_INST_COUNT >  0  THEN	
			SET RECALCULATED_WIZARD_STATUS = SNOOZED_STATUS_ID;
		ELSE 
			SET RECALCULATED_WIZARD_STATUS = CLOSED_STATUS_ID;
		END IF;
				
		UPDATE WIZARD.ALERTCONFIG 
		SET
			RAIZED_INST_COUNT = RECALCULATED_RAIZED_INST_COUNT,
			SNOOZED_INST_COUNT = RECALCULATED_SNOOZED_INST_COUNT,
			STATUS_ID = RECALCULATED_WIZARD_STATUS
		WHERE CURRENT OF C1;			
	
		FETCH C1 INTO CURRENT_ID, CURRENT_RAIZED_INST_COUNT, CURRENT_SNOOZED_INST_COUNT;
	END WHILE;					
		
END;
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36075933
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот собственно хранимка. Не пойму что в ней не так.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36076026
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PowerEdgeВот собственно хранимка. Не пойму что в ней не так.Почитайте про Data conflicts when procedures read from or write to tables .
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36076085
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PowerEdgeВот собственно хранимка. Не пойму что в ней не так.Т.е. у вас внутри процедур, похоже, идёт обращение к ALERT.FILESPACE.
Если да, то поставьте:
Код: plaintext
db2set DB2_RESOLVE_CALL_CONFLICT=YES
и попробуйте снова update на ALERT.FILESPACE cделать...
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36076167
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein, спасибо за ответы.

Прямого обращения к ALERT.FILESPACE нету. Использую NEW_TABLE и OLD_TABLE, которые предоставляет триггер. Продолжаю разбираться.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36076191
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалось локализовать ошибку.
На наличие эксепшена влияет обращение к временной таблице из WIZARD.UPDATE_INST_COUNTERS (а именно при OPEN C1;)
Если из объявления курсора убрать
Код: plaintext
WHERE ID IN (SELECT DISTINCT ALERT_CONFIG_ID FROM SESSION.WIZ_INST_STAT)
, то ошибка исчезает.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36076750
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Поставил DB2_RESOLVE_CALL_CONFLICT=YES (хотя документация говорит что это значение по умолчанию)- безрезультатно. Ошибка всё-роавно проявляется.
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36079046
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PowerEdge,

приведите такую таблицу по использованию таблиц в процедурах с указанием метода доступа к этим таблицам (r - read; w - write, create, declare):
Код: plaintext
1.
2.
3.
4.
table name            | CREATE_TEMP_TABLE | STORE_INST_COUNTERS_TO_TEMP_TABLE | UPDATE_INST_COUNTERS
----------------------------------------------------------------------------------------------------
SESSION.WIZ_INST_STAT |    {r|w|n/a}      |  ...                              | ...
...                   |                   |                                   |
...
Рейтинг: 0 / 0
SQL0746N при вызове хп из триггера
    #36079337
PowerEdge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

table name……………………….|CREATE_TEMP_TABLE| TORE_INST_COUNTERS_TO_TEMP_TABLE| UPDATE_INST_COUNTERS|RUN_ALERT
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SESSION.WIZ_INST_STAT…..|……..DECLARE……..….|……..W……..……..……..……..……..……..…….| .......R.....................................| ……..n/a
WIZARD.ALERTCONFIG……...|……..n/a…….………..….|……..n/a……..….…..…..……..….…...……..……| .......R/W................................|………R
TSM.FILESPACE……….……..|……..n/a…….………..….|……..n/a……..…….….…..……..……..……..……| .......n/a..................................|……R/W

где RUN_ALERT - процедура, инициирующая сработку триггеров.

Проделав несколько тестов я обнаружил следующее: процедура, вызывающая сработку триггеров, использует MERGE с двумя апдейтами и одним инсертом. Так вот, если переписать этот MERGE в виде отдельных запросов, тоесть двух последовательных апдейтов и одного инсерта, то ошибка исчезает. Но отказываться от MERGE не очень хочется, потому как уж очень удобно его использовать (подобных процедур довольно много) и хочется до конца разобраться с данной ошибкой, чтоб в полной мере использовать возможности БД.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / SQL0746N при вызове хп из триггера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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