quine(自我生成)SQL查询

时间:2010-10-23 21:35:49

标签: sql quine

This是一篇非常有趣的wiki文章,关于打印自己的源代码而无需访问物理源文件(在文件系统中)的程序。文章中的例子包括C和Scheme quine程序(是的,似乎它们就像那样被称为)。我记得有人问我很久以前(大约5年)是否可以编写一个“返回自己”的SQL查询。我当时很少考虑过这个问题(说实话,我根本没有考虑过它)。但在阅读完这篇文章后,我回想起那件事。现在我想说的是,那个问这个问题的人不是100%可信,因为他几乎不可能知道他在说什么。但也许有可能吗?那么,有没有人知道是否存在quine SQL查询,无论“返回本身”在该上下文中是什么意思。谢谢。

5 个答案:

答案 0 :(得分:7)

SQL Server版本,来自here

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

Oracle SQL Revealed书中的几种解决方案。

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;

答案 3 :(得分:0)

很抱歉把它挖出来。我最短的MS SQL Server版本是131个字符长的quine:

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

答案 4 :(得分:0)

使用雪花和CURRENT_STATEMENT()

SELECT CURRENT_STATEMENT();

输出:

<块引用>

SELECT CURRENT_STATEMENT();