PostgreSQL 支持 SQL 规范的VALUES表达式,规范称为<table value constructor>
SELECT *
FROM (VALUES
(1, 'one'),
(2, 'two'),
(3, 'three')
) AS t(num,letter);
num | letter
-----+--------
1 | one
2 | two
3 | three
(3 rows)
Run Code Online (Sandbox Code Playgroud)
在dbfiddle上尝试,我无法让它在 Oracle 中工作。我不断得到
ORA-00903: 无效的表名
Oracle 是否支持VALUES ( expression [, ...] )? 如果不是,从查询中提供的行文字创建虚拟表的替代方法是什么?
Oracle 是否支持 VALUES(表达式 [, ...] )?如果不是,从查询中提供的行文字创建表的替代方法是什么?
我们得到的最简洁的选项是insert all:
Run Code Online (Sandbox Code Playgroud)insert all into t values(1,'one') into t values(2,'two') into t values(3,'three') select * from dual
Run Code Online (Sandbox Code Playgroud)select * from t;NUM | 单词 --: | :---- 1 | 一 2 | 二 3 | 三
dbfiddle在这里
请注意,语法是标准的扩展,允许使用单个语句和条件插入插入多个表,如示例所示:
Run Code Online (Sandbox Code Playgroud)insert all when 1 = 1 then into t values (num, word) when num > 0 then into t values (-num, 'minus ' || word) select 0 as num, 'zero' as word from dual union all select 1, 'one' from dual union all select 2, 'two' from dual union all select 3, 'three' from dual ;7 行受影响
Run Code Online (Sandbox Code Playgroud)select * from t;NUM | 单词 --: | :---------- 0 | 零 1 | 一 2 | 二 3 | 三 -1 | 减一 -2 | 减二 -3 | 减三
dbfiddle在这里
这是功能请求 13697:添加对 VALUES() 构造函数的支持,因此目前不支持。在这张票中,您可以看到解决方法,
目前可以使用以下方法在 Oracle 中模拟(非常乏味)上述查询:
Run Code Online (Sandbox Code Playgroud)SELECT 1 FROM dual UNION ALL SELECT 2 FROM dual
所以在 Oracle 中,你会使用
SELECT 1 AS num, 'one' AS letter FROM dual
UNION ALL SELECT 2, 'two' FROM dual
UNION ALL SELECT 3, 'three' FROM dual;
Run Code Online (Sandbox Code Playgroud)