Oracle中怎样一次执行多条sql语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中怎样一次执行多条sql语句相关的知识,希望对你有一定的参考价值。

有时我们需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的
解决方案是把sql拼成下面这种形式:
begin
update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';
update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';
end;
总结如下:
以begin开始,以end;结尾(end后的分号不能省),中间的每个sql语句要以分号;结尾
在实际编码中,发现即使这样也会有错误发生,把sql语句中的换行符替换成空格就可以了
比较稳妥的编码方式是:
1、以正常的方式编写sql,根据阅读与编写的需要,中间肯定会有换行符
2、在执行之前进行替换:strSql = strSql.Replace("r\n", " ").Replace('\n', ' ');
如果不采用这种方式,可能的异常有:
ORA-00933: SQL 命令未正确结束(如果sql没有以分号结尾)
ORA-00911: 无效字符(如果未加begin 和 end)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:......(如果end后面没有;分号)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 ""在需要下列之一时:......(语句之间有换行符)
参考技术A 需要一次性执行多条sql语句,而用来更新的sql是根据实际情况用代码拼出来的
解决方案是把sql拼成下面这种形式:
begin
update TB_VG set seq = 1, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20837' and train_id = '0233086';
update TB_VG set seq = 2, vessel_id = 'Jin14', vessel_type = 'TRACK' where batch_number = '20992' and train_id = '0233110';
end;
总结如下:
以begin开始,以end;结尾(end后的分号不能省),中间的每个sql语句要以分号;结尾
在实际编码中,发现即使这样也会有错误发生,把sql语句中的换行符替换成空格就可以了
比较稳妥的编码方式是:
1、以正常的方式编写sql,根据阅读与编写的需要,中间肯定会有换行符
2、在执行之前进行替换:strSql = strSql.Replace("r\n", " ").Replace('\n', ' ');
如果不采用这种方式,可能的异常有:
ORA-00933: SQL 命令未正确结束(如果sql没有以分号结尾)
ORA-00911: 无效字符(如果未加begin 和 end)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:......(如果end后面没有;分号)
ORA-06550: 第x行, 第xxx列: PLS-00103: 出现符号 ""在需要下列之一时:......(语句之间有换行符)

oracle执行多条语句

需要同时执行多条语句: create table 和insert into table select from…。但是pl/sql developer 9.0 下单个语句执行都没问题,两句放一块就不行,尝试了直接分号隔开、begin end。
即使最简单的两个create 也不行。
如 create table a(id number(1)); create table b(id number(1)); ORA-00911: 无效字符

begin
create table a(id number(1));
create table b(id number(1));
end;
则一直换行换行,没反应。

参考技术A 你是在sql window里执行的多条语句,应该换成command windows
新建一个command window ,把所有语句粘贴进去,就可以执行多条语句了追问

我是在命令窗口执行的。

追答

加个 / 就执行了

追问

请问在哪里加,我刚接触oracle

追答

现在你在8行后加个 / 就执行了
这两个建表语句可以不用begin和end,把它们分成两行,贴到命令窗口和"编辑器"里,F8执行
或者在当前这个对话框里粘贴分成两行的语句
create table a (id number(1));
create table b (id number(1));

追问

谢谢,原来编辑器是这么个意思,不过begin end 还有问题,想学习一下,相当于两个问题了,我会提高悬赏的,希望你能帮我解答

追答

你把它保存成.sql文件,这就是所谓的脚本,DDL语句是不需要begin...end的

本回答被提问者采纳
参考技术B create table a(id number(1));
create table b(id number(1));
就这样就可以,不要写在同一行,即使有分号也不行,也没有必要用begin……end追问

谢谢,但是一楼回答的最快,也解决了我的问题

参考技术C

使用直接的DDL语句,存储过程是不能编译通过的。可以使用折中方法:

begin
execute immediate 'create table a(id number(1))';
execute immediate 'create table b(id number(1))';
end;
/

 

参考技术D create table a(id number(1));
/
create table b(id number(1));
/

以上是关于Oracle中怎样一次执行多条sql语句的主要内容,如果未能解决你的问题,请参考以下文章

(学)如何在Oracle中一次执行多条sql语句

oracle怎样跟踪一条sql语句的执行过程?

oracle执行多条语句

.NET(C#) Dapper Oracle(ODP.NET)或SQL Server 执行多条查询(select)语句的方法代码

mysql怎么一次执行多条SQL语句

mysql怎么一次执行多条SQL语句