quine (самопроизводящий) SQL-запрос - PullRequest
4 голосов
/ 24 октября 2010

Это - очень интересная вики-статья о программах, которые печатают свой собственный исходный код без какого-либо доступа к физическому исходному файлу (в файловой системе).Примеры в статьях включают программы Quine на C и Scheme (да, похоже, они так называются).Я помню, как кто-то давно спрашивал меня (около 5 лет), могу ли я написать SQL-запрос, который «возвращает себя».Я тогда об этом мало задумывался (честно говоря, я вообще об этом не думал).Но после прочтения этой статьи я вспомнил эту вещь.Теперь я хочу заявить, что человек, который задал эту проблему, не заслуживает доверия на 100%, поскольку вполне вероятно, что он понятия не имел, о чем говорит.Но, возможно, это возможно?Итак, кто-нибудь знает, существует ли SQL-запрос quine, что бы ни означало «само возвращение» в этом контексте.Благодарю.

Ответы [ 4 ]

7 голосов
/ 24 октября 2010

версия SQL Server, от здесь :

SELECT REPLACE(REPLACE('SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine',CHAR(34),CHAR(39)),CHAR(36),'SELECT REPLACE(REPLACE("$",CHAR(34),CHAR(39)),CHAR(36),"$") AS Quine') AS Quine

2 голосов
/ 04 ноября 2013

Версия Oracle:

SELECT REPLACE(REPLACE('SELECT REPLACE(REPLACE("$",CHR(34),CHR(39)),CHR(36),"$") AS Quine FROM dual',CHR(34),CHR(39)),CHR(36),'SELECT REPLACE(REPLACE("$",CHR(34),CHR(39)),CHR(36),"$") AS Quine FROM dual') AS Quine FROM dual
1 голос
/ 26 ноября 2018

Пара решений из книги Выявлен Oracle SQL .

123 байта

select
replace('@''[@'||chr(93)||''')from dual;','@',q'[select
replace('@''[@'||chr(93)||''')from dual;','@',q]')from dual;

100 байтов

select
substr(rpad(1,125,'||chr(39)),26)from dual;select
substr(rpad(1,125,'||chr(39)),26)from dual;
0 голосов
/ 19 июня 2018

Извините, что выкопал это.Моя самая короткая версия для MS SQL Server - это quine длиной 131 символ:

DECLARE @ CHAR(65)='DECLARE @ CHAR(65)=#PRINT REPLACE(@,CHAR(35),CHAR(39)+@+CHAR(39))'PRINT REPLACE(@,CHAR(35),CHAR(39)+@+CHAR(39))
...