在Oracle中将数据插入两个表的一个查询中使用INSERT语句

13

请问在Oracle 11g中是否可以在单个查询中将INSERT运行到两个表中?

我知道你可以使用INSERT ALL ... SELECT查询,但是我需要不进行SELECT就能直接将数据从XLS插入到数据库中。

理想情况下,我希望有类似于以下示例的内容:

INSERT INTO table1 t1, table2 t2 
(t1.tid, t1.date, t1.title, t2.tid, t2.date, t2.user, t2.note)
VALUES (1,'01-JAN-15','title',1,'01-JAN-15','john','test note');

有什么想法吗?


2
我认为这是不可能的。只需为Excel表中的每一行执行两次插入操作即可。如果您需要这个过程是原子性的,可以使用事务。 - GolezTrol
是的,每个条目2个插入似乎是一个简单的选项,但由于大约有5,000个条目,我只是想知道是否可以坚持5,000个插入而不是10,000个。但这是一次性的工作(希望如此),所以如果不能完成,那就算了。 - KS1
2个回答

30

尝试使用from dual;,像这样:

INSERT ALL
INTO table1
  (tid, date, title) values (s_tid, s_date, s_title)
INTO table2
  (tid, date, user, note) values (s_tid, s_date, s_user, s_note)
SELECT s_tid, s_date, s_title, s_user, s_note
FROM
( 
    SELECT 
        1 s_tid,
        '01-JAN-15' s_date,
        'title' s_title,
        'john' s_user,
        'test note' s_note
    FROM dual;
)

有趣的是,我使用INSERT ALL...SELECT语句,但提供了SELECT数据。它可以工作(查询稍微有点长),但仍然可以在单个查询中插入两个表。干杯! - KS1
这对我来说非常有效,即使在“INSERT”子句之后有更复杂的结构也是如此:WITH cte AS ( ... ) SELECT ... FROM cte - Pat Jones

-4
INSERT ALL
INTO table1
  (tid, curr_date, title) values (s_tid, s_date, s_title)
INTO table2
  (tid, curr_date, sys_user, note) values (s_tid, s_date, s_user, s_note)
SELECT s_tid, s_date, s_title, s_user, s_note
FROM
( 
    SELECT 
        2 s_tid,
        '01-FEB-15' s_date,
        'java' s_title,
        'Bablu Gope' s_user,
        'java_note' s_note
    FROM dual);

执行上述查询的过程。

  1. 将查询复制到一个文件中,其扩展名必须为.sql,例如test.sql
  2. 连接到数据库
  3. 运行此命令
  4. @test.sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接