Переход с fb 1.5 на fb 2.0
Модераторы: kdv, Alexey Kovyazin
Переход с fb 1.5 на fb 2.0
Объясните, плиз, почему не работают подобные запросы:
Delete from im where im.fk=document.st
выдает ошибку:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
DOCUMENT.ST.
At line 1, column 37.
Сообщает, что нет такой таблицы. Хотя таблицы и соответствующие поля существуют. Причем все это работало на прежней версии.
Delete from im where im.fk=document.st
выдает ошибку:
Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
DOCUMENT.ST.
At line 1, column 37.
Сообщает, что нет такой таблицы. Хотя таблицы и соответствующие поля существуют. Причем все это работало на прежней версии.
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Сорри, это организовано в тригере:Dimitry Sibiryakov писал(а):На прежней версии MS SQL это может и работало, но птичка не умела удалять из двух таблиц разом никогда.
***************************************************
CREATE TRIGGER DEL_IM FOR DOCUMENT
ACTIVE BEFORE DELETE POSITION 0
AS
begin
Delete from im where im.fk=document.st;
if (document.kod=14) then begin
delete from ip_stop
WHERE fk=document.fk and pk=document.pk_ip_stop and vid_action="отложено";
end
end
***************************************************
При дальнейшей отладке, выдается ошибка на другую таблицу c полем, например, на document.kod и т.д. НО опять же не везде. Где-то такие конструкции прокатывают.
Дело в том, что проблема вообще не только в подобных запросах (не обязательно на удаление). Такое может быть и с distinct и c select'ом.Почему так? На fb 1.5 это работало.
Не работает, потому что ты заложился на баг, исправленный в дальнейших версиях.sundoom писал(а):Сорри, это организовано в тригере:
В корне неправильно обращаться к значениям по названию таблицы, вместо этого надо использовать префиксы NEW и OLD.
Например,
Код: Выделить всё
delete from im where fk = old.st;
Извините за идиотский вопрос (я еще учусь) но какой механизм у этих префиксов и почему именно old а не new в данном случае?WildSery писал(а):Не работает, потому что ты заложился на баг, исправленный в дальнейших версиях.sundoom писал(а):Сорри, это организовано в тригере:
В корне неправильно обращаться к значениям по названию таблицы, вместо этого надо использовать префиксы NEW и OLD.
[/code]
Плиз, посоветуйте литературу на русском по firebird'у для новичка, чтоб не возникало таких вопросов.
Потому что триггер BEFORE DELETE. А какое новое значение поля может быть при удалении?sundoom писал(а):какой механизм у этих префиксов и почему именно old а не new в данном случае?
Новое значение может быть при вставке (и при этом не может быть старого), и при апдейте (и новое, и старое доступны).
Хелен Борри, наверное. Если есть где лучше описано - меня Дмитрий поправит. Смотри раздел документации, там и статьи, и книжки посоветованы.sundoom писал(а):Плиз, посоветуйте литературу на русском по firebird'у для новичка, чтоб не возникало таких вопросов.
Я сам, так получилось, ни одной книжки не читал. Хотя заглядывал во многие, если какой-то вопрос возникал.
-
- Сообщения: 52
- Зарегистрирован: 28 сен 2007, 10:19
Ептыть, коллега, эти триггеры давно нужно было поправить. Релиз проги-то когда был? Пятнадцатого еще. А сейчас уже 25. А работы там на час всего, триггеры эти ваши поправить. Может все таки будем сотрудничать поплотнее?
Может вы все-таки слезете со своего IB 7.* и будете как все, на FB? Ну чтоб поближе к народу, так сказать.
Может вы все-таки слезете со своего IB 7.* и будете как все, на FB? Ну чтоб поближе к народу, так сказать.