在SQL Server中,您可以执行以下操作:
INSERT INTO some_table (...) OUTPUT INSERTED.*
VALUES (...)
Run Code Online (Sandbox Code Playgroud)
这样您就可以插入任意的列/值集并获取这些结果.有没有办法在Oracle中这样做?
我能想到的最好的是:
INSERT INTO some_table (...)
VALUES (...)
RETURNING ROWID INTO :out_rowid
Run Code Online (Sandbox Code Playgroud)
...使用:out_rowid作为绑定变量.然后使用这样的第二个查询:
SELECT *
FROM some_table
WHERE ROWID = :rowid
Run Code Online (Sandbox Code Playgroud)
...但这与它返回列中的所有内容并不完全相同,而不仅仅是我插入的列.
有没有更好的方法来做到这一点,而不使用大量的PL/SQL,最好只有一个查询?
出于调试目的,我希望能够" TO_CHAR"一个Oracle PL/SQL内存表.这是一个简单的例子,我想做的事情:
DECLARE
TYPE T IS TABLE OF MY_TABLE%ROWTYPE INDEX BY PLS_INTEGER;
V T;
BEGIN
-- ..
-- Here, I'd like to dbms_output V's contents, which of course doesn't compile
FOR i IN V.FIRST .. V.LAST LOOP
dbms_output.put_line(V(i));
END LOOP;
-- I want to omit doing this:
FOR i IN V.FIRST .. V.LAST LOOP
dbms_output.put_line(V(i).ID || ',' || V(i).AMOUNT ...);
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
简单来说,这可以实现吗?我问的原因是因为我懒得一次又一次地编写这个调试代码,而且我想在任何表类型中使用它.
我不知道如何使用 RETURNING 子句返回所有属性
我想要这样的东西:
DECLARE
v_user USER%ROWTYPE
BEGIN
INSERT INTO User
VALUES (1,'Bill','QWERTY')
RETURNING * INTO v_user;
END;
Run Code Online (Sandbox Code Playgroud)
RETURNING * INTO出现错误,如何更换*?