问题现象
drop table test_tab; create table test_tab(col1 varchar(100)); insert into test_tab values(' aa; '); insert into test_tab values(' aa;'); |
|---|

这个问题发生在从pg向崖山进行数据迁移的过程中,通过pg_dump将数据导出到文件后进行执行,第一条语句执行报错,在pg上执行是不会报错的,在崖山和oracle上执行均报错。
与之相似的问题还有:
drop table test_tab; create table test_tab(col1 varchar(100)); insert into test_tab values('aa');insert into test_tab values('bb'); |
|---|

问题的风险及影响
SQL语句执行报错,数据插入不成功。
问题影响的版本
所有版本。
问题发生原因
oracle和崖山目前对分号的处理方法是读取一行,如果这一行的末尾是分号,就认为当前SQL结束了。而本质问题是这个分号产生了歧义,数据库并不知道究竟是操作员写错了语句,还是语句本身就是这样。
解决方法及规避方式
修改语句:
insert into test_tab values(' aa'||';'||' '); |
|---|
问题分析和处理过程
通过源码和oracle、pg对比测试得到问题原因。
经验总结
目前这个问题已经在进行修复,碰到之后可以通过修改语句解决。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。