powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / for select и coalesce
25 сообщений из 47, страница 1 из 2
for select и coalesce
    #35484380
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем! Хочу уточнить у вас поведение следующего блока:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  TMP_INDEX   = NULL;
  FOR
    SELECT COALESCE(K.OBJECT_INDEX, :TMP_INDEX)
    FROM ...
    INTO :TMP_INDEX
  DO BEGIN

  END

Здесь в COALESCE(K.OBJECT_INDEX, :TMP_INDEX) новое :TMP_INDEX подставляется на каждом шаге итерации for select.

Такое поведение и задумано, или это баг?

Или это равнозначно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  FOR
    SELECT COALESCE(K.OBJECT_INDEX, NULL)
    FROM ...
    INTO :TMP_INDEX
  DO BEGIN

  END
...
Рейтинг: 0 / 0
for select и coalesce
    #35484396
Glok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни чё не понял...
Объясни что, хочеш сделать?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484399
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlokНи чё не понял...
Объясни что, хочеш сделать?

Этот блок
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  TMP_INDEX   = NULL;
  FOR
    SELECT COALESCE(K.OBJECT_INDEX, :TMP_INDEX)
    FROM ...
    INTO :TMP_INDEX
  DO BEGIN

  END
равнозначен этому
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  FOR
    SELECT COALESCE(K.OBJECT_INDEX, NULL)
    FROM ...
    INTO :TMP_INDEX
  DO BEGIN

  END

?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484417
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Второй вообще смысла не имеет.
...
Рейтинг: 0 / 0
for select и coalesce
    #35484421
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее не имеет смысла конструкция
Код: plaintext
COALESCE(K.OBJECT_INDEX, NULL)
...
Рейтинг: 0 / 0
for select и coalesce
    #35484426
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stelvicВернее не имеет смысла конструкция
Код: plaintext
COALESCE(K.OBJECT_INDEX, NULL)


Я про смысл ничего не спрашивал. Я спросил, равнозначны ли конструкции:
Этот блок
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  TMP_INDEX   =  10 ;
  FOR
    SELECT COALESCE(K.OBJECT_INDEX, :TMP_INDEX)
    FROM ...
    INTO :TMP_INDEX
  DO BEGIN

  END

равнозначен этому
Код: plaintext
1.
2.
3.
4.
5.
6.
  FOR
    SELECT COALESCE(K.OBJECT_INDEX,  10 )
    FROM ...
    INTO :TMP_INDEX
  DO BEGIN

  END

?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484434
Glok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет не идентичны
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  TMP_INDEX   = NULL;
  FOR
    SELECT COALESCE(K.OBJECT_INDEX, :TMP_INDEX)
    FROM ...
    INTO :TMP_INDEX
  DO BEGIN

  END
После первой итерации в которой K.OBJECT_INDEX не нулл
п переменную
Код: plaintext
TMP_INDEX
будет писано значение,
И конструкция COALESCE(K.OBJECT_INDEX, :TMP_INDEX) не вернёт нулл больше ни когда.
...
Рейтинг: 0 / 0
for select и coalesce
    #35484439
Glok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты это... по утру такими извратами не занимайся.
...
Рейтинг: 0 / 0
for select и coalesce
    #35484440
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Avenger__Такое поведение и задумано, или это баг?
вообще-то, задумано. Но, если сильно придираться, то это баг :-)
...
Рейтинг: 0 / 0
for select и coalesce
    #35484443
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlokПосле первой итерации в которой K.OBJECT_INDEX не нулл
п переменную
Код: plaintext
TMP_INDEX
будет писано значение,
И конструкция COALESCE(K.OBJECT_INDEX, :TMP_INDEX) не вернёт нулл больше ни когда.

Так вот я и говорю, что значение COALESCE(K.OBJECT_INDEX, :TMP_INDEX) пересчитывается на каждом шаге итерации for select.

Меня интересует, такое поведение и задумано, или это баг? Если задумано, будет ли оно изменено в последующих версиях на другое?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484451
Glok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пилять.... ушел править код...
...
Рейтинг: 0 / 0
for select и coalesce
    #35484462
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrвообще-то, задумано. Но, если сильно придираться, то это баг :-)

Есть надежда на то, что этот баг останется навсегда?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484508
Glok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если учесть тенденцию на всё более точное соответствие стандарту... могут и исправить.
Я бы на эту фичу не закладывался.
...
Рейтинг: 0 / 0
for select и coalesce
    #35484518
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glok
Если учесть тенденцию на всё более точное соответствие стандарту...

Если учесть, что стандарт вообще не описывает процедурного языка...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
for select и coalesce
    #35484527
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glokмогут и исправить.

Не могут. Слишком многие приложения тогда рассыплются. Представь, что
перестанет работать такое:
Код: plaintext
for select get_id(gen,  1 ) from table...
Точнее не перестанет, а начнёт выдавать константу. А ведь это широко
разрекламированный способ прерывания длинных выборок.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
for select и coalesce
    #35484547
Glok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Ну да есть такое...
Дык, можно закладываться?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484576
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlokДык, можно закладываться?

Лично я бы заложился, поскольку представляю как/почему это работает и
каких изменений может потребовать изменение поведения.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
for select и coalesce
    #35484623
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlokПилять.... ушел править код...
Что-то не нахожу подвоха.
Создал таблицу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ID           NAIM
 1             jkl
 2             <null>
 3             <null>
 4              123 
 5             <null>
 6             <null>
 7             <null>
 8             <null>

процедуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE PROCEDURE NEW_PROCEDURE 
returns (ttt varchar( 20 ))
as
begin
  for select coalesce(TEST.NAIM, :ttt) as TTT from TEST into :ttt do
  begin
    suspend;
  end
end

запускаю, получаю:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
TTT
jkl
jkl
jkl
 123 
 123 
 123 
 123 
 123 
Все как и предполагал.
...
Рейтинг: 0 / 0
for select и coalesce
    #35484706
Dimano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stelvic
Что-то не нахожу подвоха.
Создал таблицу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
ID           NAIM
 1             jkl
 2             <null>
 3             <null>
 4              123 
 5             <null>
 6             <null>
 7             <null>
 8             <null>

процедуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE PROCEDURE NEW_PROCEDURE 
returns (ttt varchar( 20 ))
as
begin
  ttt = 'Ёпрст';
  for select coalesce(TEST.NAIM, :ttt) as TTT from TEST into :ttt do
  begin
    suspend;
  end
end

Подвох предполагать:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
TTT
jkl
Ёпрст
Ёпрст
 123 
Ёпрст
Ёпрст
Ёпрст
Ёпрст
.
...
Рейтинг: 0 / 0
for select и coalesce
    #35484783
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПодвох предполагать:С какой это радости такое предполагать? for celect - это цикл, ttt или TMP_INDEX у автора - переменная. Если переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484790
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stelvicЕсли переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл?

Такое поведение - это БАГ.
...
Рейтинг: 0 / 0
for select и coalesce
    #35484815
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
__Avenger__ stelvicЕсли переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл?

Такое поведение - это БАГ.
Хм. Так это у тебя так ведет? А версия какая? Значит, похоже, изменили. Поскольку у меня на 2.1.0.17798 ведет себя иначе.
...
Рейтинг: 0 / 0
for select и coalesce
    #35484821
Dimano
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stelvicС какой это радости такое предполагать? for celect - это цикл, ttt или TMP_INDEX у автора - переменная. Если переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл? FOR SELECT можно воспринимать не как цикл, а как курсор, я сделал выборку а потом фетчу записи по одной, с какой стати у меня курсор изменяется из-за изменения переменных?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484827
stelvic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimano stelvicС какой это радости такое предполагать? for celect - это цикл, ttt или TMP_INDEX у автора - переменная. Если переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл? FOR SELECT можно воспринимать не как цикл, а как курсор, я сделал выборку а потом фетчу записи по одной, с какой стати у меня курсор изменяется из-за изменения переменных?
Да хоть и курсор. Почему переменные должны зависеть от курсора?
...
Рейтинг: 0 / 0
for select и coalesce
    #35484841
__Avenger__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stelvicХм. Так это у тебя так ведет? А версия какая? Значит, похоже, изменили. Поскольку у меня на 2.1.0.17798 ведет себя иначе.

Поведение такое, как здесь
...
Рейтинг: 0 / 0
25 сообщений из 47, страница 1 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / for select и coalesce
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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