【问题标题】:Oracle 11g Insert Statement into Multiple TablesOracle 11g 将语句插入多个表
【发布时间】:2015-08-31 16:07:40
【问题描述】:

我目前在尝试同时执行多个语句时遇到问题。尝试运行以下 INSERT 语句时,我不断收到此错误:

INSERT INTO report_header ( report_number, company_id, user_id, entry_date) VALUES ( 6797, 15967, 84, TRUNC(SYSDATE));
INSERT INTO report_detail (part_id, condition_id, uom_id, dvc_id, cqh_id, alt_part_id, entry_date, qty_quoted, qty_req, unit_cost, unit_price, customer_price, route_code) VALUES ((SELECT part_id from parts where pn = '2366'),15,1,3,(select max(report_id) from report_header), (SELECT part_id from parts where pn = '2366'),'11-JUN-2015',1,1,0,1895,1895,'O');
SELECT * from Dual;  

因此,当我拆分命令并一一运行它们时,它们运行良好,但在同一语句中,我收到“命令未正确结束”错误。我一直在尝试所有不同的线程,这是我能得到的结果。任何帮助表示赞赏。

在此先感谢大家。

【问题讨论】:

  • 对不起,sstan,每行后面都有一个分号。我没有把它放在正文中。
  • 哈。没想到 :) 所以尽管有分号,你还是得到了错误?您能告诉我们您使用什么来运行 SQL 语句吗?是在代码中吗?如果是这样,你能告诉我们那个代码吗?您使用的是 Oracle SQL Developer 之类的工具吗?
  • 我只是在使用 Oracle 的 ERP 应用程序中使用交互式 SQL。就像我之前说的,我可以独立使用这些语句,但是当我尝试将它们一起使用时,我得到一个“命令未正确结束”的错误。我已经尝试了所有其他形式的基本多重 INSERT 语句,但仍然没有成功。只是想看看是否有人有任何先进的技术可以将上述内容简化为一个语句。

标签: sql oracle oracle11g triggers sql-insert


【解决方案1】:

sstan 指出的是您在每条语句的末尾都缺少分号。

试试:

INSERT INTO report_header ( report_number, company_id, user_id, entry_date) VALUES ( 6797, 15967, 84, TRUNC(SYSDATE));
INSERT INTO report_detail (part_id, condition_id, uom_id, dvc_id, cqh_id, alt_part_id, entry_date, qty_quoted, qty_req, unit_cost, unit_price, customer_price, route_code) VALUES ((SELECT part_id from parts where pn = '2366'),15,1,3,(select max(report_id) from report_header), (SELECT part_id from parts where pn = '2366'),'11-JUN-2015',1,1,0,1895,1895,'O');
SELECT * from Dual;

注意“;”分隔每个单独的语句。

【讨论】:

  • 每条语句后面都有一个分号。我只是暗示了它。
【解决方案2】:

根据您的评论,我仍然不清楚您使用什么工具将语句提交到数据库。

很有可能您的查询工具一次只能处理一个语句。

即使您按照您的方式批量处理 3 个语句,它们仍然是 3 个不同的语句,可能该工具无法处理。

可用于将其转换为单个语句的技术是将 SQL 作为单个匿名 PL/SQL 块的一部分提交。不确定您的工具是否支持该功能。但如果是这样,你可以试试这个(我省略了从双重部分中选择,因为我不知道它的意义是什么):

begin
    INSERT INTO report_header ( report_number, company_id, user_id, entry_date) VALUES ( 6797, 15967, 84, TRUNC(SYSDATE));
    INSERT INTO report_detail (part_id, condition_id, uom_id, dvc_id, cqh_id, alt_part_id, entry_date, qty_quoted, qty_req, unit_cost, unit_price, customer_price, route_code) VALUES ((SELECT part_id from parts where pn = '2366'),15,1,3,(select max(report_id) from report_header), (SELECT part_id from parts where pn = '2366'),'11-JUN-2015',1,1,0,1895,1895,'O');
end;

关键是要像上面那样使用包装 beginend; 关键字。希望它对你有用。

【讨论】:

  • 我可以发誓我已经尝试过了,但它奏效了。再次感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2022-01-15
  • 2020-06-28
  • 1970-01-01
相关资源
最近更新 更多