Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не работат INSERT в цикле / 19 сообщений из 19, страница 1 из 1
16.02.2022, 16:50
    #40134576
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Добрый день всем.
В процедуре есть вставка в другую таблицу в блоке for select.
Но ничего не вставляется, хотя, если тот же INSERT стоит перед блоком, то это работает.
Заранее спасибо.
...
Рейтинг: 0 / 0
16.02.2022, 16:57
    #40134580
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Джек,

ошибка в строке 123
...
Рейтинг: 0 / 0
16.02.2022, 16:59
    #40134582
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Не работает, когда эта процедура вызывается из триггера на удаление в другой таблице.
А когда напрямую её вызываю, то всё работает.
...
Рейтинг: 0 / 0
16.02.2022, 17:00
    #40134586
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
в эксперте есть пошаговый отладчик, жмакай Ф8 и смотри дошел ты 19 строки или не дошел.
...
Рейтинг: 0 / 0
16.02.2022, 17:01
    #40134587
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Джек
Не работает, когда эта процедура вызывается из триггера на удаление в другой таблице.
А когда напрямую её вызываю, то всё работает.
Чтобы триггер после изменений гарантированно сработал надо сделать переконнект, см. кэширование метаданных.
...
Рейтинг: 0 / 0
16.02.2022, 17:07
    #40134590
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Ivan_Pisarevskyв эксперте есть пошаговый отладчик, жмакай Ф8 и смотри дошел ты 19 строки или не дошел.
Прошёл всю процедуру в отладчике - никаких ошибок.
Ivan_PisarevskyЧтобы триггер после изменений гарантированно сработал надо сделать переконнект, см. кэширование метаданных.
Это только в IBExpert так или в клиентской программе тоже?
...
Рейтинг: 0 / 0
16.02.2022, 17:10
    #40134591
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
вангую, небось в for select ... insert .. suspend

А потом вызывается криво
...
Рейтинг: 0 / 0
16.02.2022, 17:26
    #40134597
hvlad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Джек
В процедуре есть вставка в другую таблицу в блоке for select.
Но ничего не вставляется, хотя, если тот же INSERT стоит перед блоком, то это работает.
Возможно, этот блок не выполняется, т.е. select не возвращает строк.
...
Рейтинг: 0 / 0
16.02.2022, 17:30
    #40134599
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Симонов Денисвангую, небось в for select ... insert .. suspend
Нет, без suspend.
Вызывается:
execute procedure имя_процедуры(...);
.
...
Рейтинг: 0 / 0
16.02.2022, 17:31
    #40134601
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Джек,

если ты не понял, то тебя просят показать исходный код триггера и процедуры. Иначе можно гадать до посинения
...
Рейтинг: 0 / 0
16.02.2022, 17:32
    #40134602
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
hvladВозможно, этот блок не выполняется, т.е. select не возвращает строк.
Возвращает, я ж говорю, в отладчике проходил её - в блок заходит.
...
Рейтинг: 0 / 0
16.02.2022, 17:35
    #40134603
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Джек
Это только в IBExpert так или в клиентской программе тоже?
Если ты триггер отредактировал в эксперте, то клиентскую программу надо перезапустить, чтобы измененный триггер сработал.

Джек
Нет, без suspend.
Вызывается
внутри фор селекта есть суспенд? фор селект перебирает хотя бы одну запись?
...
Рейтинг: 0 / 0
16.02.2022, 17:50
    #40134607
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Триггер:
Код: sql
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.
CREATE OR ALTER trigger table_ad0 for table
active after delete position 0
AS
begin
  /* Trigger text */
  execute procedure proc(null, null, old.id, null);
end

Процедура:
create or alter procedure proc(
    p1 date = null,
    p2 date = null,
    p3 integer = null,
    p4 varchar(6) = null)
as
declare variable field1 integer;
... 
begin
  /* Procedure Text */
  
  --вот здесь работает
  insert into table_debug(field) values(:field1);

  for select t.field1, ...
      from table2 t
      left join table3...
      left join table4...
      ...
      where t.id=:p3
  into :field1,...
  do
  begin
    
    //а здесь не работает
    insert into table_debug(field) values(:field1);

  end

  exit;
end
...
Рейтинг: 0 / 0
16.02.2022, 18:24
    #40134615
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Ты серьёзно ожидаешь, что select тебе вернёт уже удалённые записи?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.02.2022, 18:49
    #40134621
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Повеселил вечером, поднял настроение
...
Рейтинг: 0 / 0
16.02.2022, 19:05
    #40134624
Dimbuch®
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Джек,

Переделай на before delete

Код: plsql
1.
2.
3.
4.
5.
6.
7.
CREATE TRIGGER table_bd0 FOR table
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
  /* Trigger text */

END
...
Рейтинг: 0 / 0
16.02.2022, 19:30
    #40134632
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Dimitry SibiryakovТы серьёзно ожидаешь, что select тебе вернёт уже удалённые записи?..
Я об этом тоже думал, но потом посмотрел, что айдишник-то триггер передаёт в процедуру из уже удалённой записи.
И если триггер с процедурой в одной транзакции, то до конца выполнения процедуры удаление не закомичено.
...
Рейтинг: 0 / 0
16.02.2022, 19:32
    #40134633
Джек
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Dimbuch®Переделай на before delete
Спасибо большое.
Помогло.
...
Рейтинг: 0 / 0
16.02.2022, 20:36
    #40134644
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работат INSERT в цикле
Джек
Dimitry SibiryakovТы серьёзно ожидаешь, что select тебе вернёт уже удалённые записи?..

Я об этом тоже думал, но потом посмотрел, что айдишник-то триггер передаёт в процедуру из уже удалённой записи.
И если триггер с процедурой в одной транзакции, то до конца выполнения процедуры удаление не закомичено.

и что с того что не закомичено? Транзакция всегда видит свои собственные изменения
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Не работат INSERT в цикле / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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