Ale*_*dra 8 sql oracle common-table-expression
有人可以解释一下为什么这个脚本会返回'some_word'但是没有关于不存在的模式试图从中检索数据的错误schema_that_doesnt_exist.tab吗?
with tab as
(
select 'some_word' str
from dual
)
select *
from schema_that_doesnt_exist.tab;
Run Code Online (Sandbox Code Playgroud)
有关此问题的Oracle文档中的某些URL也对我有所帮助.
我猜它与限定名称绕过有关:
SQLite 演示 -- 没有这样的表:schema_that_doesnt_exists.tab
PostgreSQL 演示 ——关系“schema_that_doesnt_exists.tab”不存在
SQLServer 演示-- 对象名称“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';
Run Code Online (Sandbox Code Playgroud)
如果我想准备用于测试的输入数据集,我必须使用实际数据。使用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';
Run Code Online (Sandbox Code Playgroud)
更多:瞬态数据的单元测试