plsql 动态sql遇到ORA-00911: invalid character错误

关键词 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语句分号隔开的方式写东西,其实有些地方还是需要注意,某些做法只能在可视化工具中使用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值