关键词 PLSQL 分号
前些日子在学习plsql写一个包的时候遇到一个小问题。
具体为:程序读取表中的数据拼装ddl 语句 然后动态sql执行,结果报错
CODE:-911 ERROR:ORA-00911: invalid character
具体拼接完成的代码如下(因为是直接输出的拼接代码含有转义字符所以会有两个分号:“ ” ”)
-- Create table qyzcfzzb
create table qyzcfzzb(jlbh NUMBER(10) NOT NULL,qynsrsbh VARCHAR2(20) NOT NULL,zchj NUMBER )
tablespace DATA_CW
pctfree 10
initrans 1
maxtrans 255;
-- Add comments to the columns
comment on column qyzcfzzb.jlbh
IS ''BIANHAO'';
comment on column qyzcfzzb.qynsrsbh
IS ''NSRSBH'';
comment on column qyzcfzzb.zchj
IS ''CAIWUHEJI'';
-- Create primary key constraints
alter table qyzcfzzb
add constraint PK_qyzcfzzb_BH primary key (jlbh)
using index
tablespace DATA_CW
pctfree 10
initrans 2
maxtrans 255;
错误代码的本意是无效字符,许多博客上说的方法也是动态执行sql语句的解释器不能识别末尾的分号,我尝试去掉分号发现还是不行,然后就查是否有语言拼写错误的地方,然而还是找不到。
后来才恍然大悟,动态解释器不识别分号,那么我在一些可视化工具中习惯用的用分号分隔多个sql语句的习惯也不能用于这里,也就是说,本质上是对于纯sql语句(相对于plsql而言),动态执行就是一次一句,类似于plsql-dev这些可视化管理工具,从它的运行提示也可以看出,它也是利用分号分开提取各个单独的sql语句,然后依次提交给解释器执行的。
那么我如果要跑这一段语句,有两种方法,以将其改写为带有begin end 的plsql语句,或者将这一段中的每个语句单独执行所有语句末尾都不带分号。
结语:我从学习oracle开始就一直使用的可视化工具,一直就是多条sql语句分号隔开的方式写东西,其实有些地方还是需要注意,某些做法只能在可视化工具中使用。