|
|
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Привет всем! Хочу уточнить у вас поведение следующего блока: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Здесь в COALESCE(K.OBJECT_INDEX, :TMP_INDEX) новое :TMP_INDEX подставляется на каждом шаге итерации for select. Такое поведение и задумано, или это баг? Или это равнозначно Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:08 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Ни чё не понял... Объясни что, хочеш сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:22 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
GlokНи чё не понял... Объясни что, хочеш сделать? Этот блок Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:24 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Нет. Второй вообще смысла не имеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:30 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Вернее не имеет смысла конструкция Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:32 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
stelvicВернее не имеет смысла конструкция Код: plaintext Я про смысл ничего не спрашивал. Я спросил, равнозначны ли конструкции: Этот блок Код: plaintext 1. 2. 3. 4. 5. 6. 7. равнозначен этому Код: plaintext 1. 2. 3. 4. 5. 6. ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:36 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Нет не идентичны Код: plaintext 1. 2. 3. 4. 5. 6. 7. п переменную Код: plaintext И конструкция COALESCE(K.OBJECT_INDEX, :TMP_INDEX) не вернёт нулл больше ни когда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:39 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Ты это... по утру такими извратами не занимайся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:40 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
__Avenger__Такое поведение и задумано, или это баг? вообще-то, задумано. Но, если сильно придираться, то это баг :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:41 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
GlokПосле первой итерации в которой K.OBJECT_INDEX не нулл п переменную Код: plaintext И конструкция COALESCE(K.OBJECT_INDEX, :TMP_INDEX) не вернёт нулл больше ни когда. Так вот я и говорю, что значение COALESCE(K.OBJECT_INDEX, :TMP_INDEX) пересчитывается на каждом шаге итерации for select. Меня интересует, такое поведение и задумано, или это баг? Если задумано, будет ли оно изменено в последующих версиях на другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:42 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Пилять.... ушел править код... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:46 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
dimitrвообще-то, задумано. Но, если сильно придираться, то это баг :-) Есть надежда на то, что этот баг останется навсегда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 09:51 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Если учесть тенденцию на всё более точное соответствие стандарту... могут и исправить. Я бы на эту фичу не закладывался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 10:14 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Glok Если учесть тенденцию на всё более точное соответствие стандарту... Если учесть, что стандарт вообще не описывает процедурного языка... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 10:17 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Glokмогут и исправить. Не могут. Слишком многие приложения тогда рассыплются. Представь, что перестанет работать такое: Код: plaintext разрекламированный способ прерывания длинных выборок. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 10:20 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Ну да есть такое... Дык, можно закладываться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 10:28 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
GlokДык, можно закладываться? Лично я бы заложился, поскольку представляю как/почему это работает и каких изменений может потребовать изменение поведения. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 10:37 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
GlokПилять.... ушел править код... Что-то не нахожу подвоха. Создал таблицу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. процедуру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. запускаю, получаю: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 10:50 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
stelvic Что-то не нахожу подвоха. Создал таблицу: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. процедуру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Подвох предполагать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 11:15 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
авторПодвох предполагать:С какой это радости такое предполагать? for celect - это цикл, ttt или TMP_INDEX у автора - переменная. Если переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 11:42 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
stelvicЕсли переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл? Такое поведение - это БАГ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 11:45 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
__Avenger__ stelvicЕсли переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл? Такое поведение - это БАГ. Хм. Так это у тебя так ведет? А версия какая? Значит, похоже, изменили. Поскольку у меня на 2.1.0.17798 ведет себя иначе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 11:54 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
stelvicС какой это радости такое предполагать? for celect - это цикл, ttt или TMP_INDEX у автора - переменная. Если переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл? FOR SELECT можно воспринимать не как цикл, а как курсор, я сделал выборку а потом фетчу записи по одной, с какой стати у меня курсор изменяется из-за изменения переменных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 11:55 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Dimano stelvicС какой это радости такое предполагать? for celect - это цикл, ttt или TMP_INDEX у автора - переменная. Если переменной изменили значение в одной итерации то почему она должна в следующей принимать значение, которое ей присвоили до входа в цикл? FOR SELECT можно воспринимать не как цикл, а как курсор, я сделал выборку а потом фетчу записи по одной, с какой стати у меня курсор изменяется из-за изменения переменных? Да хоть и курсор. Почему переменные должны зависеть от курсора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 11:58 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
stelvicХм. Так это у тебя так ведет? А версия какая? Значит, похоже, изменили. Поскольку у меня на 2.1.0.17798 ведет себя иначе. Поведение такое, как здесь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 12:01 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
stelvicДа хоть и курсор. Почему переменные должны зависеть от курсора? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 12:06 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
не путать мухи и котлеты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 12:12 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
DimanoТоже должно менятся на каждую итерацию? Да. Точно так же как и Код: plaintext 1. 2. 3. 4. 5. 6. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 12:25 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Dimano stelvicДа хоть и курсор. Почему переменные должны зависеть от курсора? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 12:29 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov DimanoТоже должно менятся на каждую итерацию? Да. Точно так же как и Код: plaintext 1. 2. 3. 4. 5. 6. на самом деле, не должно. Но ты прав в том, что хрен это исправишь малой кровью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 13:14 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
авторна самом деле, не должно. Странно, почему? а в этой конструкции тоже не должно? Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 13:43 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
уточню свои слова выше. Переменная меняться должна, т.е. INTO ей будет присваивать каждый раз новое значение. Но влиять на результат селекта переменная не должна. Т.е. селект должен работать с ее копией на момент начала выполнения запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 13:48 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
dimitr Вот они золотые слова... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 13:52 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
ну насколько я понимаю в конструкции Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 14:03 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
щас проверил, похоже, неправильно я понимал. Таблица: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 14:16 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Ошибочка в предыдущем посте. таблица: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 14:18 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Короче, с функцией между select и into изменения на лету происходят, а с нормальными проверками нет, так что ли? А с какими функциями -- любыми, или только с сабжевой новомодной заменой case? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 14:20 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
chAlxКороче, с функцией между select и into изменения на лету происходят, а с нормальными проверками нет, так что ли? А с какими функциями -- любыми, или только с сабжевой новомодной заменой case?Что-то не понял я вопроса. В примерах автора изменения с переменной происходят в начале каждой итерации. Конструкция into присваивает ей новое значение, зависящее от того, что лежит в поле таблицы и от предыдущего значения переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 14:29 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Поэкспереминтировал поразному, выдаёт также как и в первом случае. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 14:49 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
stelvic chAlxКороче, с функцией между select и into изменения на лету происходят, а с нормальными проверками нет, так что ли? А с какими функциями -- любыми, или только с сабжевой новомодной заменой case?Что-то не понял я вопроса. В примерах автора изменения с переменной происходят в начале каждой итерации. Конструкция into присваивает ей новое значение, зависящее от того, что лежит в поле таблицы и от предыдущего значения переменной. Примеры с функцией coalesce() показывают, что в ней переменная [ошибочно] пересчитывается. Примеры без функции (select id where id > :idmax into :idmax) покажут, что она [традиционно] не пересчитывается. Вопрос в том, где граница у этого поведения: любая ли функция приводит к такому эффекту, или только сабжевая, или вообще не в ней дело.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 15:04 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Dimano Код: plaintext Вот ведь, а я думал съязвил... Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 15:11 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Игры с сортировкой помогают. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 15:31 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
chAlx Примеры с функцией coalesce() показывают, что в ней переменная [ошибочно] пересчитывается. Примеры без функции (select id where id > :idmax into :idmax) покажут, что она [традиционно] не пересчитывается. Вопрос в том, где граница у этого поведения: любая ли функция приводит к такому эффекту, или только сабжевая, или вообще не в ней дело.. я бы поспорил с ошибочностью этого поведения, думаю кто использует таким образом переменную (первый вариант) прекрасно понимает к чему это может привести, в противном случае использовал бы либо константу либо завел копию. Это чтоб не писать лишнего кода между BEGIN--END, я так понимаю: Код: plaintext 1. Код: plaintext 1. 2. 3. 4. хотя зачем такое может понадобиться я хз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.08.2008, 15:47 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
dimitrуточню свои слова выше. Переменная меняться должна, т.е. INTO ей будет присваивать каждый раз новое значение. Но влиять на результат селекта переменная не должна. Т.е. селект должен работать с ее копией на момент начала выполнения запроса. В тройке теперь именно так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 01:59 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
__Avenger__В тройке теперь именно так? проверь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2014, 09:28 |
|
||
|
for select и coalesce
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov Glokмогут и исправить. Не могут. Слишком многие приложения тогда рассыплются. Представь, что перестанет работать такое: Код: sql 1. Точнее не перестанет, а начнёт выдавать константу. А ведь это широко разрекламированный способ прерывания длинных выборок. В оракле так ( и не только для генераторов, но и для функций (выборки из коллекции) при использовании connect by и level в качестве параметра ), а вообще на мой взгляд FB ведёт себя правильно, разве стабильность курсора имеет отношение к переменным? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.12.2014, 00:28 |
|
||
|
|

start [/forum/topic.php?all=1&fid=40&tid=1563153]: |
0ms |
get settings: |
5ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
166ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 451ms |

| 0 / 0 |
