在Oracle中有一个“全部插入”请求。
INSERT ALL
INTO mytable1 (empId, name, last_name) VALUES (expr1, expr2, expr_n)
INTO mytable2 (empId, address) VALUES (o_expr1, o_expr2, o_expr_n)
SELECT * FROM dual;
我如何在一个请求中同样地将记录插入到postgres中呢?我没有任何返回值。
在Oracle中有一个“全部插入”请求。
INSERT ALL
INTO mytable1 (empId, name, last_name) VALUES (expr1, expr2, expr_n)
INTO mytable2 (empId, address) VALUES (o_expr1, o_expr2, o_expr_n)
SELECT * FROM dual;
我如何在一个请求中同样地将记录插入到postgres中呢?我没有任何返回值。
2条答案
按热度按时间hts6caw31#
你可以使用一个公共表表达式:
(The final
SELECT
尝试镜像the Oracle idiom,但您可以忽略它)pcww981p2#
在这种情况下,即使在Oracle中也没有理由使用
Insert All
。values
是在过程块(pl/sql)中定义的变量,它们不是从select后面派生的。因此,在Postgres中没有理由需要一条语句。2在过程块(plpgsql)中插入将完成完全相同的操作。因此会做完全相同的事情。而且IMHO比CTE中的DML更容易理解。
注:
正如所写的,这些不会在Oracle或Posrgres中运行。
mytable2
的插入命名了2个要插入的列,但包含3个值。那些必须匹配。我猜这是一个复制/粘贴错误。