为何Oracle SQL Developer中可成功运行无SELECT/FROM子句的查询?
问题背景与现象
环境
- Oracle 18c
- SQL Developer 18.1.0.095 Build 095.1630
测试数据创建脚本
create table assets (asset_id varchar2(10)); begin insert into assets (asset_id) values ('01'); insert into assets (asset_id) values ('02'); insert into assets (asset_id) values ('02'); end; / commit;
操作步骤
在SQL Developer中,选中以下仅包含WHERE子句部分表达式(无SELECT和FROM子句)的代码,按CTRL+Enter执行:
asset_id) in ( select asset_id from assets where asset_id = '02' )
执行后成功运行,请问该无SELECT、FROM子句的查询为何能执行成功?
解答
这是SQL Developer的自动补全机制在起作用:
- 当你选中一段不完整的SQL片段执行时,SQL Developer会自动补全必要的语法部分,将其转换为合法的SQL语句。
- 针对你这段代码,工具会自动补全为
SELECT * FROM assets WHERE asset_id) in (...)——虽然这里多了一个右括号,但Oracle的语法解析器会忽略这个不影响语义的小错误。 - 补全后的语句是合法的查询,因此能成功执行,最终返回
asset_id为02的两条记录。
本质上这是SQL Developer为提升用户体验设计的功能,让片段式的条件语句无需手动补全SELECT和FROM部分就能直接执行。
内容的提问来源于stack exchange,提问作者User1974
相关产品推荐
相关产品推荐

