【问题标题】:Oracle INSERT into two tables in one queryOracle 在一次查询中插入两个表
【发布时间】:2014-04-25 14:52:15
【问题描述】:

只是想知道是否可以在 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');

有什么想法吗?

【问题讨论】:

  • 我认为这是不可能的。只需为 Excel 工作表中的每一行执行两次插入。如果你需要它是原子的,你可以使用事务。
  • 是的,每个条目 2 个 INSERTS 似乎是一个简单的选择,但由于将有大约 5,000 个条目,我只是想知道我是否可以坚持 5,000 个 INSERTS 而不是 10,000 个。但这是一项一次性的工作(希望如此),所以如果不能完成,那就这样吧。

标签: sql oracle


【解决方案1】:

尝试使用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 数据。它可以工作(查询稍长),但它仍然在单个查询中插入两个表。干杯!
【解决方案2】:
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

【讨论】:

    猜你喜欢
    • 2013-11-26
    • 2015-05-30
    • 2013-12-14
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    相关资源
    最近更新 更多