Is there an Oracle equivalent to SQL Server's OUTPUT INSERTED.*?

后端 未结 2 1145
暖寄归人
暖寄归人 2020-12-03 21:31

In SQL Server, you can do things like this:

INSERT INTO some_table (...) OUTPUT INSERTED.*
VALUES (...)

So that you can insert arbitrary se

相关标签:
2条回答
  • 2020-12-03 21:31

    The RETURNING clause supports the BULK COLLECT INTO synthax. Consider (10g):

    SQL> CREATE TABLE t (ID NUMBER);
    
    Table created
    SQL> INSERT INTO t (SELECT ROWNUM FROM dual CONNECT BY LEVEL <= 5);
    
    5 rows inserted
    SQL> DECLARE
      2     TYPE tab_rowid IS TABLE OF ROWID;
      3     l_r tab_rowid;
      4  BEGIN
      5     UPDATE t SET ID = ID * 2
      6      RETURNING ROWID BULK COLLECT INTO l_r;
      7     FOR i IN 1 .. l_r.count LOOP
      8        dbms_output.put_line(l_r(i));
      9     END LOOP;
     10  END;
     11  /
    
    AADcriAALAAAAdgAAA
    AADcriAALAAAAdgAAB
    AADcriAALAAAAdgAAC
    AADcriAALAAAAdgAAD
    AADcriAALAAAAdgAAE
    

    It works with multi-row UPDATE and DELETE with my version (10.2.0.3.0) but NOT with INSERT:

    SQL> DECLARE
      2     TYPE tab_rowid IS TABLE OF ROWID;
      3     l_r tab_rowid;
      4  BEGIN
      5     INSERT INTO t (SELECT ROWNUM FROM dual CONNECT BY LEVEL <= 5)
      6      RETURNING ROWID BULK COLLECT INTO l_r;
      7     FOR i IN 1 .. l_r.count LOOP
      8        dbms_output.put_line(l_r(i));
      9     END LOOP;
     10  END;
     11  /
    
    ORA-06550: line 7, column 5:
    PL/SQL: ORA-00933: SQL command not properly ended
    

    Maybe you have a more recent version (11g?) and the BULK COLLECT INTO is supported for multi-row INSERTs ?

    0 讨论(0)
  • 2020-12-03 21:42

    Maybe I don't understand the question, but wouldn't this do it? (you must know what you want back)

    INSERT INTO some_table (...)
    VALUES (...)
    RETURNING some_column_a, some_column_b, some_column_c,  ...  INTO :out_a, :out_b, :out_c, ...
    

    @Vincent returning bulk collect into for multi-row insert works only in conjunction with forall (in another words if you insert from collection you can retrieve "results" into another)

    0 讨论(0)
提交回复
热议问题