powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / IF и FOR SELECT на удаляемое поле
19 сообщений из 19, страница 1 из 1
IF и FOR SELECT на удаляемое поле
    #39520542
Epox0UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
execute block as
declare vN  VARCHAR(250);
begin
  IF (EXISTS(SELECT 1 FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME = 'T1' AND RDB$FIELD_NAME = 'TXT')) THEN BEGIN
  for select TXT from T1 into :vN do
  ----
  EXECUTE STATEMENT 'ALTER TABLE T1 DROP TXT';
  end
end



Ошибка обращения к T1.TXT при повторном запуске скрипта.

получается for select парсится или выполняется игнорируя результат условия IF ?
IF проверил работает как и ожидается.

FB 2.1.7
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520547
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, конечно. Как "проверял", отладчиком?
"Повторном запуске" после коммита или без коммита?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520549
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вся процедура парсится и препарируется одновременно. Тут тебе не MS SQL, интерпретирующий
батч по отдельным запросам.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520551
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, он ещё и селектит дропнутое поле...
Да, так нельзя, будет ошибка на препаре.
Решение очевидно, конечно, но кривь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520553
Epox0UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. конечно коммит после каждого выполнения.
2. IF проверял, вместо FOR SELECT, вставлял update заведомо существующего поля/записи. В логах: все как должно быть.
3. Задача: одним скриптом вытащить данные в таблицу Т2, а в Т1 удалить эти поля. Вот и я думал что это очевидное решение. Оказалось парсер не пускает такую конструкцию.

Баг/недоработка СУБД?
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520557
Epox0UA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамА, он ещё и селектит дропнутое поле...
Да, так нельзя, будет ошибка на препаре.
Решение очевидно, конечно, но кривь.

Вообще-то по логике можно. IF не должен давать зайти внутрь.
п.с. Да, можно, как оказалось парсер MERGE пропускает как и должен.
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520561
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Epox0UA,

это на уровне архитектуры, EXECUTE BLOCK препарируется как единый statement. Если поля нет, значит ошибка препарирования. Не нравится иди туда где такое можно MS SQL, MySQL.
В Firebird метаданные "на лету" изменять не принято
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520579
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Epox0UA1. конечно коммит после каждого выполнения.
2. IF проверял, вместо FOR SELECT, вставлял update заведомо существующего поля/записи. В логах: все как должно быть.
3. Задача: одним скриптом вытащить данные в таблицу Т2, а в Т1 удалить эти поля. Вот и я думал что это очевидное решение. Оказалось парсер не пускает такую конструкцию.

Баг/недоработка СУБД?

1. COMMIT не означает unprepare
3. подмена понятий/смена контекста
если делается через EXECUTE STATEMENT, то и делать надо через него все, в т.ч. UPDATE.

это граната специальной системы :)
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520596
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Epox0UA> 3. Задача: одним скриптом вытащить данные
Epox0UA> в таблицу Т2, а в Т1 удалить эти поля.

Стоит задуматься о кривой архитектуре,
ибо DDL и DML (да ещё в зависимости
от DDL) смешивать не принято.

Epox0UA> Оказалось парсер не пускает такую конструкцию.
Epox0UA> Баг/недоработка СУБД?

Не баг и не недоработка, а правила.
В Оракле, к примеру, правила ещё строже.
Нельзя на ходу выкидывать мотор и
возмущаться, что машина не едет дальше.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520654
Dmitry Kurbsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Epox0UAЗадача: одним скриптом вытащить данные в таблицу Т2, а в Т1 удалить эти поля.

Это не задача. Это твой способ решения некой задачи. Если расскажешь про задачу, может быть, здесь подскажут, как решить её без убиения столбцов на лету.
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520693
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мне гранат не жалко

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
execute block as
declare vN  VARCHAR(250);
begin
  IF (EXISTS(SELECT 1 FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME = 'T1' AND RDB$FIELD_NAME = 'TXT')) THEN BEGIN
  for execute statement 'select TXT from T1' into :vN do
  ----
  EXECUTE STATEMENT 'ALTER TABLE T1 DROP TXT';
  end
end
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520705
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нехай все обезьяны подорвутся,
да здравствует естественный отбор?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39520717
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Epox0UAБаг/недоработка СУБД?

Баг и недоработка. Но не СУБД.
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39521017
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам, если это делается один раз, монопольно, для обновления структуры бд, то почему бы и нет
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39521024
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvait,

если это делается для обновления структуры БД, то и не фиг EXECUTE BLOCK делать. Пиши нормальный скрипт
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39521027
vvvait
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис, suum cuique
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39521039
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vvvait> если это делается один раз

Если делается один раз, то не бывает никаких "повторно".

> монопольно, для обновления структуры бд, то почему бы и нет

Если для обновления структуры, то делается скрипт
(и обычно два отдельных - один на весь DDL, затем
отдельный на DML), а не смешанный EB на 2 строчки.
И обычно обновляя структуры, знают с какой версии
(и структуры БД), а не проверяют (хотя бывает и такое).

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39521051
pastor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамvvvait> если это делается один раз

Если делается один раз, то не бывает никаких "повторно".

> монопольно, для обновления структуры бд, то почему бы и нет

Если для обновления структуры, то делается скрипт
(и обычно два отдельных - один на весь DDL, затем
отдельный на DML), а не смешанный EB на 2 строчки.
И обычно обновляя структуры, знают с какой версии
(и структуры БД), а не проверяют (хотя бывает и такое).



обычно, правильно, удобно - три разных сущности

перенос на новую структуру БД у нас делается выполнением нескольких десятков блоков.
в старой БД создаются поля (если их нет), заполняются по правилам, или по дефолту.
что должно быть - берется из новой структуры БД, там же скрипты и правила переноса. и клиентские exe/

потом данные тупо переливаются в новую БД. гарантированно правильной структуры.

в прежней ничего не удаляется. все равно на помойку.

скорость - 2 гб база за 20 мин.
бонусом тождественная структура БД у всех заказчиков, клиентские экзешники в точности соответствуют структуре.

пункт № 0 - бакап.
...
Рейтинг: 0 / 0
IF и FOR SELECT на удаляемое поле
    #39521053
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pastor> обычно, правильно, удобно - три разных сущности

Кому и кобыла - невеста, да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / IF и FOR SELECT на удаляемое поле
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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