powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / СTE. Разъясните результат запроса.
49 сообщений из 49, показаны все 2 страниц
СTE. Разъясните результат запроса.
    #38998992
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FB 3.0.0.31898

Запросы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select 
  uuid,
  uuid,
  uuid,
  uuid
from
  (select gen_uuid() from rdb$database) (UUID);

-- или такой

with t
as (select
      gen_uuid() as UUID
    from
      rdb$database)
select
  t.uuid,
  t.uuid,
  t.uuid,
  t.uuid
from
  t;


выдают во всех полях разные значения.
Т.е. функция вычисляется при каждом обращении к полю.
Так и должно быть?
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999011
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Энди Таккер,

ну а как? функция всегда должна возвращать одно значение? или как current_timestamp, получать значение при первом обращении в запросе или psql, и при любых повторах выдавать полученное значение?
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999015
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Энди Таккер,

на 2.5 тоже самое.

gen_uuid() не детерминирована.

Сделай вот так и будет тебе счастье.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
with t
as (select
      (select gen_uuid() from rdb$database) as UUID
    from
      rdb$database)
select
  t.uuid,
  t.uuid,
  t.uuid,
  t.uuid
from
  t;



ну или вот так обверни MAX(gen_uuid())
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999030
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvфункция всегда должна возвращать одно значение?
Так я к функции вроде бы только один раз обращаюсь.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999034
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Энди ТаккерТак я к функции вроде бы только один раз обращаюсь.
ну да, ну да. такая же херня и с UDF.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999035
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Энди Таккер,

это тебе так кажется. В данном случае gen_uuid() as UUID в CTE работает как вычисляемый столбец в таблице
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999050
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
  uuid,
  uuid,
  uuid,
  uuid
from
  (select GEN_ID(G, 1) from rdb$database) (UUID)

Выдаёт первый раз 4, 3, 2, 1 и при каждом выполнении увеличивает значение G на 4.


Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select 
  uuid,
  uuid,
  uuid,
  uuid
from
  (select GEN_ID(G, 1) from rdb$database) (UUID)
order by 1

Выдаёт первый раз 5, 4, 3, 2
Увеличивает значение G на 5.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select 
  uuid,
  uuid,
  uuid,
  uuid
from
  (select GEN_ID(G, 1) from rdb$database) (UUID)
group by 1, 2, 3, 4

выдаёт: 9, 9, 9, 9
следующий запуск: 18, 18, 18, 18

Каждый раз высчитывается значение функции, которое по смылу должно быть посчитано лишь раз.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999054
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

поздравляю. вы открыли для себя, как вычисляются функции и значения столбцов в sql.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999068
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
И естественное следствие:
Код: sql
1.
2.
select GEN_ID(G, 1) from rdb$types
order by 1 desc


При G = 0 выдаёт значения "почему-то" в порядке возрастания и "почему-то" начиная с числа 229:
229, 230, 231, ...

Неожиданно.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999070
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
kdvпоздравляю. вы открыли для себя, как вычисляются функции и значения столбцов в sql.
Я просто искренне удивлён что это не баг.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999077
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

вы еще кэширование для себя откройте. ну там размер пакета tcp, plan sort, select for update, и так далее. Там числа будут другие.
Развлекайтесь, в общем.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999079
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кловун снова на арене...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999086
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

YouTube Video
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999088
-Я просто искренне удивлён что это не баг.я тоже удивлялся , но потом привык )
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999089
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Оказывается если создать вычисляемое поле в таблице и селектнуть его так:
Код: sql
1.
select C from T order by C desc

,
то C тоже будет вычислено по 2 раза на запись, а результат выведен не в том порядке.

Это SQL-стандарт сказал что так правильно?
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999093
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

implementation details.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999121
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

не ищи бага там где его нет
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999124
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваня Сусанин> я тоже

Я сначала было думал, что это ты, прикалываешься.
Потом пригляделся - нет, подумал, что Вовчик, гад.
Потом ещё пригляделся - нет, это вообще кто-то новый.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999125
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> не ищи бага там где его нет

Пусть, пусть ищет. Только пусть ищет в каком-нибудь одном топике, а-то утомил.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999133
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Ваня Сусанин-Я просто искренне удивлён что это не баг.я тоже удивлялся , но потом привык )
Дай бог чтобы когда-нибудь это было исправлено. И когда исправивших спросят, почему они это исправили, то чтобы они искренне ответили: "потому что пользователи нам указали что им так не логично, и мы, встав на их место и посмотрев их глазами, увидели что оно на самом деле не логично, и решили исправить".
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999134
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-,

у тебя какое-то неверное представление о вычисляемых столбцах. Он не материализуется во время выборки. Вычисляемый столбец здесь по сути это ссылка на его выражение не более того. Избежать этого можно только для детерминированных функций. Но существуют они только в Fb3 и только как PSQL функции. Да ещё там детерминированность работает (возможно пока) только если эта функция без параметра.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999137
Гаджимурадов РустамЯ сначала было думал, что это ты, прикалываешься.гы... делать мне нечего, что ле ? тем более по теме, которую "проходил" несколько лет взад... :-)

BTW, 2 Денис : а чего ты не добавил замечания про rand() & gen_uuid() в доку (что они перевычисляются при каждом упоминании, а также выносятся из сортировки) ? Этот вопрос вспыхивает тут (хотя и нечасто), может есть смысл в доку вставить сиё ?
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999145
- НЕ Дай бог чтобы когда-нибудь это было исправлено.Поправел. Нельзя это исправлять, ибо наверняка уже полно прикладного кода, который опирается как раз на такое поведение!
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999156
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваня Сусанин> гы... делать мне нечего, что ле ?

Так ты горазд. Как в прибаутке.

Ваня Сусанин> тем более по теме, которую "проходил" несколько лет взад... :-)

Я ж не про эту тему. Минус-то уже несколько месяцев мельтешит.

Ваня Сусанин> наверняка уже полно прикладного кода, который опирается как раз на такое поведение!

Едва ли, на это хрен заложишься и оперешься, потому что все
подобные поведения нефиксированы и нерегламентированы*
(а большинство даже и недокументированы, IIRC). Разве что
на какие-то конкретные частные случаи, но я щас даже с ходу
не вспомню на какие именно и как они могут быть полезны.
Но что не надо трогать карточный домик - согласен.

P.S. * помню, один и тот же запрос "легким мановением руки"
сжирал то 2 вызова за итерацию, то 3, то 4.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999157
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денису тебя какое-то неверное представление о вычисляемых столбцах. Он не материализуется во время выборки.Так kdv же объяснил, что это потому что такая реализация.
Т.е. оно так не потому что так типа правильно, а потому что так реализовано.
Если бы реализация не вычисляла лишнего, то мы бы получали то что ожидаем.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999158
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-> Т.е. оно так не потому что так типа правильно

А как правильно и где это написано?

> то мы бы получали то что ожидаем.

Так ожидалку нужно починить, делов-то.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999165
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваня Сусанинчто они перевычисляются при каждом упоминании
откуда это понеслось, что "они" не должны перевычисляться при каждом упоминании?
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999176
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv"они" не должны перевычисляться
пофиг на перевычисление, это действительно особенность реализации. А вот неожиданный порядок сортировки в выводе результата очень даже можно посчитать багом. Ибо запрос не делает то, о чем его явно попросили.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999186
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Гаджимурадов Рустам-> Т.е. оно так не потому что так типа правильно

А как правильно и где это написано?

> то мы бы получали то что ожидаем.

Так ожидалку нужно починить, делов-то.

dimitrkdv"они" не должны перевычисляться
пофиг на перевычисление, это действительно особенность реализации. А вот неожиданный порядок сортировки в выводе результата очень даже можно посчитать багом. Ибо запрос не делает то, о чем его явно попросили.

Гаджимурадов Рустам, истина вопиёт :)
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999211
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваня Сусанин, есть это там
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999213
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-> истина вопиёт :)

Кто вопиёт, где вопиёт, какая истина? :)
Если истина это ДЕ, то "перевычисление,
это особенность реализации". Если про
сортировку (не по перевычислению),
которая не работает - баг, конечно, хотя
я не знаю о каком посте он говорит.

Если же "не работает" сортировка по
перевычислению - то лично я бы не
согласился с ним, что это баг. Более того,
лет эдак несколько назад он сам с собой
тоже был несогласен, IIRC. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999221
Симонов ДенисВаня Сусанин, есть это тамКак-то не очень сильно бросилось в глаза - см аттач.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999223
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисэто тебе так кажется
Сам вижу)
Симонов Денисgen_uuid() не детерминирована.
Симонов ДенисВычисляемый столбец здесь по сути это ссылка на его выражение не более того. Избежать этого можно только для детерминированных функций.
Проверил тезис про детерминированность.
Взял пример функции из новой документации и просто подставил его вместо gen_uuid() в запрос.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE FUNCTION FN_T
RETURNS DOUBLE PRECISION DETERMINISTIC
AS
BEGIN
RETURN rand();
END;

with t1(f) as(
SELECT fn_t() FROM rdb$database)
select f, f, f from t1;


fn_t() отработал при каждом появлении f в запросе.
Так что в данном случае дело не в детерминированности, а в "особенностях реализации"
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999227
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваня Сусанин,

не там ищешь. См. в CREATE FUNCTION заметку про DETERMINISTIC
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999238
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Там не сказано, что из себя представляют, в плане детерминированности, существующие встроенные функции.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999240
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамЕсли же "не работает" сортировка по перевычислению - то лично я бы не согласился с ним, что это баг. Более того, лет эдак несколько назад он сам с собой тоже был несогласен, IIRC. :)
ну, это не ужас-ужас, конечно. Примерно на том же уровне безобразия, что и пресловутый "стабильный курсор". То, что 30 лет назад было "as designed", сейчас уже несколько по-другому выглядит.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999264
Симонов Денисне там ищешь. См. в CREATE FUNCTION заметку про DETERMINISTICИз вот этого текста:Необязательное предложение DETERMINISTIC указывает, что функция
детерминированная. Детерминированные функции каждый раз возвращают один и
тот же результат <. . .>
Примечание
На самом деле в текущей версии Firebird, не существует кэша хранимых
функций с маппингом входных аргументов на выходные значения.
Указание инструкции "deterministic" на самом деле нечто вроде
«обещания», что код функции будет возвращать одно и то же. В данный
момент детерминистическая функция считается инвариантом и работает
по тем же принципам, что и другие инварианты. Т.е. вычисляется и
кэшируется на уровне текущего выполнения данного запроса.-- логически не получается вывести то поведение rand() & gen_uuid(), о котором говорится в данном топеге.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999365
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> ну, это не ужас-ужас, конечно. Примерно на том же уровне безобразия

Так ты определись ужо, это баг или нет.
Баг - это однозначная ошибка, когда
поведение отличается от документированного.

> что и пресловутый "стабильный курсор"

Угу. Вы вроде его "пофиксили" "изменили"
в тройке - примерно по той же логике, с чем я и
не согласен. Но спорить не буду, вам там виднее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999381
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

если нарушаются декларативные правила языка, то это однозначный баг. Какие бы аргументы мы себе не придумывали на этот счет.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999415
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваня Сусанин,

мало ли недетерминированных функций можно придумать. Не ужели под каждую примечание нужно писать? Проще уж в одном месте описать. Если не согласен как в этом месте описано предложи как лучше.

Всем. Все встроенные функции ничего о своей детерминированности не знают. Это чисто подсказка для PSQL функций.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999437
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr> если нарушаются декларативные правила языка, то это однозначный баг.

Это ты про select rand() order by rand() ?

Ну хозяин барин, чё, не смею спорить.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999441
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,

в это виде однозначно ничего не нарушается. А вот так
Код: sql
1.
select rand() order by 1


уже спорный вопрос
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999530
Энди Таккер
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисмало ли недетерминированных функций можно придумать. Не ужели под каждую примечание нужно писать?

Можно и в одном абзаце описать, если их поведение однотипно.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999541
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Энди Таккер,

это проще описать в операторе SELECT.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999545
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Гаджимурадов Рустамdimitr> если нарушаются декларативные правила языка, то это однозначный баг.

Это ты про select rand() order by rand() ?

Ну хозяин барин, чё, не смею спорить.

Говорю серверу:
дай мне 10 GEN_ID(G,1) и посортируй в обратном порядке:
Код: sql
1.
SELECT first 10 GEN_ID(G,1) from rdb$types order by 1 desc

...получаю не в том порядке что просил и с пропуском 10-ти значений, что я тоже не просил.

Говорю серверу:
дай мне 10 чётных GEN_ID(G,1):
Код: sql
1.
select first 10 GEN_ID(G, 1) as A from rdb$types where A / 2 * 2 = A

...это вообще не компилится. Хоть это и другая тема, но тоже про неочевидные странности.

А вот этот запрос что должен вернуть исходя из ваших знаний SQL?
Код: sql
1.
select GEN_ID(G, 1) from rdb$types group by 1

Результат начинается не с 1, а с 231, и с инкрементом 3 для похоже всех значений кроме последнего. Для последнего инкремент 2: (..., 900, 903, 906, 909, 911). Итого 4 вызова на запись вместо одного.
Инкремент в 3 говорит что внутри движка где-то кроме сортировки (которая дала начало с 231) сработало ещё что-то, что дало ещё +2 лишних GEN_ID(G,1) на каждую запись.

GEN_ID(G,1) - вообще удобная штука оказалась чтобы смотреть сколько сейчас лишних вызовов делается, не гадая.

CAST наверняка тоже перевычисляется при сортировках и при группировках по полю с ним.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999547
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-Говорю серверу:
дай мне 10 GEN_ID(G,1) и посортируй в обратном порядке:
Код: sql
1.
SELECT first 10 GEN_ID(G,1) from rdb$types order by 1 desc

...получаю не в том порядке что просил и с пропуском 10-ти значений, что я тоже не просил.


С натяжкой можно и багом назвать. Я уже говорил в текущей реализации
Код: sql
1.
SELECT first 10 GEN_ID(G,1) from rdb$types order by 1 desc


преобразуется в
Код: sql
1.
SELECT first 10 GEN_ID(G,1) from rdb$types order by GEN_ID(G,1) desc




-Говорю серверу:
дай мне 10 чётных GEN_ID(G,1):
Код: sql
1.
select first 10 GEN_ID(G, 1) as A from rdb$types where A / 2 * 2 = A

...это вообще не компилится. Хоть это и другая тема, но тоже про неочевидные странности.

А это уже незнание языка SQL.

-А вот этот запрос что должен вернуть исходя из ваших знаний SQL?[src sql]
select GEN_ID(G, 1) from rdb$types group by 1

этот запрос глуп по определению

-GEN_ID(G,1) - вообще удобная штука оказалась чтобы смотреть сколько сейчас лишних вызовов делается, не гадая.

это да Таблоид с помощью этого много чего в работе оптимизатора постигает.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999553
-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
-
Гость
Симонов Денис-Говорю серверу:
дай мне 10 чётных GEN_ID(G,1):
Код: sql
1.
select first 10 GEN_ID(G, 1) as A from rdb$types where A / 2 * 2 = A

...это вообще не компилится. Хоть это и другая тема, но тоже про неочевидные странности.

А это уже незнание языка SQL.
А как на языке SQL будет "дай 100 GEN_ID(G,1), где значения не кратны 5" ?
Хочется написать:
Код: sql
1.
select first 100 GEN_ID(G,1) F from T where F / 5 * 5 <> F

но стандарт не велит (хотя возможно у него на это есть причины, я не знаю). Можно EXECUTE BLOCK использовать, и там отфильтровать вручную, но это как-то...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
execute block returns (V bigint) as
  declare variable Cnt integer;
begin
  Cnt = 0;
  while (Cnt <> 100) do
  begin
    V = GEN_ID(G, 1);
    if (V / 5 * 5 <> V) then
    begin
      Cnt = Cnt + 1;
      suspend;
    end
  end
end


А если нужен order by desc?

Отвлечённый вопрос: как снаружи посортировать результат EXECUTE BLOCK? Или как WHERE к нему приписать?
Ну т.е. как это у хранимок происходит я знаю, а вот у анонимных блоков как?
Напрашивается:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
select * from (
  execute block returns (V bigint) as
    declare variable Cnt integer;
  begin
    Cnt = 0;
    while (Cnt <> 100) do
    begin
      V = GEN_ID(G, 1);
      if (V / 5 * 5 <> V) then
      begin
        Cnt = Cnt + 1;
        suspend;
      end
    end
  end
) (VV)
where VV > 30
order by VV desc

Но что-то не работает.
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999555
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-А как на языке SQL будет "дай 100 GEN_ID(G,1), где значения не кратны 5" ?

обычно для этого не надо более 100 раз дёргать генератор.

А если нужен order by desc?

> Отвлечённый вопрос: как снаружи посортировать результат EXECUTE BLOCK?

вот так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
execute block returns (V bigint) as
  declare procedure p returns(out bigint)
  as
    declare variable Cnt integer;
  begin
    Cnt = 0;
    while (Cnt <> 100) do
    begin
      out = GEN_ID(G, 1);
      if (out / 5 * 5 <> out) then
      begin
        Cnt = Cnt + 1;
        suspend;
      end
    end
  end
begin
  for select out
      from p
      order by out desc
      into v
  do
    suspend;
end



> Или как WHERE к нему приписать?
Никак. Если надо вписывай внутрь EB

P.S. Вопросы у тебя какие-то дурацкие. К практике отношения не имеют
...
Рейтинг: 0 / 0
СTE. Разъясните результат запроса.
    #38999700
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис> в это виде однозначно ничего не нарушается.
Симонов Денис> А вот так уже спорный вопрос

Я об этом и говорил, это одно и то же.
Кому спорный, кому нет - я же говорю
ДЕ - хозяин барин, с текущим вектором
развития я ничему не удивлюсь. :)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
49 сообщений из 49, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / СTE. Разъясните результат запроса.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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