Oracle SQL窗口连续执行insert语句报错:ORA-00911: 无效字符

今天在PL/SQL SQL窗口下中执行多条插入语句,实例如下:

c.sql

1 insert into t2 values('7','aa'); 
2 insert into t2 values('8','bb'); 
3 insert into t2 values('9','cc');

语句,符合都是符合规范的,于是直接执行上述语句,突然就提示ORA-00911: 无效字符,当时就纳闷了,于是就是检查报错的地方,发现也没问题,但是多条执行的时候报错,然后就单条执行那条报错的语句,居然成功执行。

同样的脚本我用command窗口执行,居然成功执行,也没有报上面的错误,这就很奇怪,于是就去网上查询了下,才发现其中的门道。

SQL窗口方法实际上是给SQL*PLUS提供了包含多个语句的块,可是却没有BEGIN...END扩起来,所以它不认了。
而command窗口使用@c.sql方法,SQL*PLUS读取该文件,按照sqlterminal进行语句的分割,然后逐句运行的,而不是作为一个块运行的。

 

结论:

当在SQL窗口执行多条DML语句时,一定要用begin。。。end;将你的语句块包裹起来,否则就不认;

当在Command窗口执行多条DML语句时,不需要用begin。。。end;将你的语句块包裹起来,因为它本身就是逐条执行DML语句。

你可能感兴趣的:(Oracle)