相关疑难解决方法(0)

是否有Oracle等效于SQL Server的OUTPUT INSERTED.*?

在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,最好只有一个查询?

sql sql-server oracle oracle10g

16
推荐指数
2
解决办法
1万
查看次数

Oracle PL/SQL TABLE类型的TO_CHAR

出于调试目的,我希望能够" 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)

简单来说,这可以实现吗?我问的原因是因为我懒得一次又一次地编写这个调试代码,而且我想在任何表类型中使用它.

oracle plsql tostring temp-tables

4
推荐指数
1
解决办法
2357
查看次数

PL/SQL 如何返回 ROW 中的所有属性

我不知道如何使用 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出现错误,如何更换*

sql oracle plsql insert sql-returning

3
推荐指数
1
解决办法
5341
查看次数