Как стать автором
Обновить

Комментарии 17

Красиво, но заголовок вводит в заблуждение. Это не «чистый SQL», а SQL для Firebird. «WITH RECURSIVE», «GEN_ID», «RDB$DATABASE» и т.п. в стандартном SQL нет.
НЛО прилетело и опубликовало эту надпись здесь
Строго говоря — решение с WITH RECURSIVE — тоже не обладает, число шагов конечное и очень небольшое. Решение более «в лоб» — запускать бесконечно много раз запрос, но это уже требует процедурного SQL и какого-то подобия цикла (точнее, перехода).
1024 шага в Firebird
Конструкция USING в том числе с поддержкой рекурсии введена в SQL-1999 (SQL3) ( en.wikipedia.org/wiki/SQL ). Если какие-то СУБД не поддерживают этот стандарт, то это не проблемы шерифа.
RDB$DATABASE имеет аналог в каждой СУБД (DUAL в Oracle, SELECT без FROM в MS SQL и т.п.). Операции манипуляции с генераторами или последовательностями есть так же во всех уважающих себя СУБД. Так что указанный код вполне себе «SQL», с небольшими особенностями синтаксиса, которые не влияют на суть.
Хотя правильней, конечно, было бы написать «Машина Тьюринга на чистом SQL-1999» :)
мне все-таки кажется, в заголовке эти подробности лишние :)
тогда это была бы неправда, «чистой» реализации любого из стандартов sql не существует. а «чистый sql» это правда, как правда и то, что sql-ы бывают разные
правильнее было бы написать, конечно, DML, а не sql, но эту аббревиатуру мало кто помнит.
Однозначный вин. Но считаю идею ненормальности раскрытой не полностью. Теперь напишите интерпретатор sql для получившегося интерпретатора машины Тьюринга. И запустите интерпритатор Тьюринга на получившемся интерпретаторе sql. (Тем не менее извращение заслуживает всяческих похвал)
А я надеялся, что смогу спать теперь спокойно :(
Эти бесконечные ленты мне уже снятся, два месяца думал над решением
А что если хранить состояние в пользовательских переменных при помощи RDB$SET_CONTEXT и RDB$GET_CONTEXT?
можно, наверное, но без рекурсии все равно, боюсь, не получится
Может быть, кому-то будет интересно: есть решатель судоку, написанный одним-единственным стейтментом Oracle SQL.
Это не чистый SQL, если я не ослепла.
а что такое чистый SQL?

PS: Я имел ввиду DML
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории