我试图破译这个SQL查询我有点困惑

时间:2016-01-20 21:22:31

标签: sql oracle11g

SELECT 'delete schema.'||table_name||' where code =''XYZ'';'||'
commit;' FROM users 

这就是我所看到的

select delete scheme.table_name where code = 'xyz'; commit; from users

谢谢!

2 个答案:

答案 0 :(得分:2)

我可以看到混乱。但结果应该很简单

您没有执行正在创建字符串的删除语句

您正在使用表格user,并且有一个名为table_name

的字段

但你的最终结果是错误的

这相当于

select 'delete scheme.table_name where code = 'xyz'; commit;' 
from users

table_name的价值是什么

可能在查询之后,将结果复制/粘贴到rdbms以执行某些命令。

答案 1 :(得分:0)

SELECT c FROM t返回一个表,其中一列名为c,每行表t都有一行。输出行包含其输入行的列c值。

SELECT 'pq' FROM t返回一个包含一列和一行的表。该列的值是由字符p和字符q形成的字符串。

SELECT 'p''q' FROM t返回一个包含一列和一行的表。该列的值是由字符p,然后是撇号字符',然后是字符q形成的字符串。

SELECT 'p'||c||'q' from t返回一个表,其中一列包含表t的每一行。输出行包含由字符p形成的字符串,然后是形成其输入行的列c值的字符串表示的字符,然后是字符q

SELECT 'delete schema.'||table_name||' where code =''XYZ'';'||'commit;' FROM users 

因此,如果在表用户有两行并且两列table_name值是由字符abcd形成的字符串时运行此查询,则结果是一个包含一列的表两排。一列和两行的值是由以下字符组成的字符串:

delete schema.ab where code ='XYZ';commit;
delete schema.cd where code ='XYZ';commit;

如果表用户中只有一行,并且您在另一个查询中将查询作为子选择运行,则子选择返回的单列单行表可以(隐式)转换为作为其一个元素的字符串

您可能希望将一个这样的行的(字符串)值作为一系列SQL命令传递给DBMS。

但如果你是"看到"由字符

组成的字符串
 select delete scheme.table_name where code = 'xyz'; commit; from users

然后您使用查询字符串执行其他操作而不是将其作为查询运行。但是你还没有清楚地说明你在什么状态下提交什么系统以获得什么输出的字符串。