是否有与SQL Server';插入的输出*?

是否有与SQL Server';插入的输出*?,sql,sql-server,oracle,oracle10g,Sql,Sql Server,Oracle,Oracle10g,在SQL Server中,您可以执行以下操作: INSERT INTO some_table (...) OUTPUT INSERTED.* VALUES (...) SELECT * FROM some_table WHERE ROWID = :rowid 这样您就可以插入任意的列/值集并返回这些结果。在Oracle中有什么方法可以做到这一点吗 我能想到的最好办法是: INSERT INTO some_table (...) VALUES (...) RETURNING ROWID INT

在SQL Server中,您可以执行以下操作:

INSERT INTO some_table (...) OUTPUT INSERTED.*
VALUES (...)
SELECT *
FROM some_table
WHERE ROWID = :rowid
这样您就可以插入任意的列/值集并返回这些结果。在Oracle中有什么方法可以做到这一点吗

我能想到的最好办法是:

INSERT INTO some_table (...)
VALUES (...)
RETURNING ROWID INTO :out_rowid
…使用:out_rowid作为绑定变量。然后使用第二个查询,如下所示:

INSERT INTO some_table (...) OUTPUT INSERTED.*
VALUES (...)
SELECT *
FROM some_table
WHERE ROWID = :rowid
…但这与它返回列中的所有内容不同,而不仅仅是我插入的列


有没有更好的方法来做到这一点而不使用大量的PL/SQL,最好只使用一个查询

返回子句支持synthax。考虑(10g):


也许您有一个更新的版本(11g?),并且多行插入支持批量收集到。

也许我不理解这个问题,但这不就可以了吗?(你必须知道你想要什么)


@Vincent将批量收集返回到多行插入仅与forall结合使用(换句话说,如果从集合中插入,则可以将“结果”检索到另一个集合)

我不太担心行数,而是担心列数。行的数量几乎总是一个,而列是可变的。@Jason:如果列的数量是可变的/在编译时不知道,如果您感兴趣的是列(而不是行数据),则必须使用dbms_sql你是如何推导出(…)的?在这一点上,您肯定知道插入中引用了哪些列了吗?我刚刚阅读了插入的输出()。显然,它允许您选择返回的行数据是在任何表触发器运行之前还是之后。Oracle的RETURNING子句不支持这一点—它只在触发器有机会更改数据后才提供数据。@Jeffrey Kemp—我知道这些列是什么。但是,数据库也应如此。:-)
INSERT INTO some_table (...)
VALUES (...)
RETURNING some_column_a, some_column_b, some_column_c,  ...  INTO :out_a, :out_b, :out_c, ...