有人可以解释一下为什么这个脚本会返回'some_word'
但是没有关于现有架构尝试从schema_that_doesnt_exist.tab
检索数据的错误吗?
with tab as
(
select 'some_word' str
from dual
)
select *
from schema_that_doesnt_exist.tab;
有关此问题的Oracle文档中的某些URL也会对我有所帮助。
答案 0 :(得分:2)
我猜它与qualified names bypass with有关:
SQLite Demo - 没有这样的表:schema_that_doesnt_exists.tab
PostgreSQL Demo - 关系“schema_that_doesnt_exists.tab”不存在
SQLServer Demo - 无效的对象名称'schema_that_doesnt_exists.tab'。
同样:
图片来自:https://modern-sql.com/blog/2018-04/mysql-8.0
无论如何,当你需要为数据库单元测试(只读查询)模拟一些数据时它会很有用。
例如:
SELECT *
FROM schema.table_name -- here goes real data (lots of records)
WHERE col = 'sth';
如果我想为测试准备输入数据集,我必须使用实际数据。
使用WITH
我可以将其重写为:
WITH table_name AS (
SELECT 'sth' AS col, ... FROM dual UNION ALL
SELECT 'sth2' AS col, ... FROM dual...
)
SELECT *
FROM schema.table_name -- cte is closer and data is taken from it
WHERE col = 'sth';