今天遇到一个问题,本地数据库一个表中无法插入数据,检查发现是因为表中一个字段有检查约束,但是因为字符集的问题,约束条件中的中文变成了???,所以一直报错,问题很明显,重建这个约束就可以了,但是麻烦的是在删除这个约束的时候报错 ora-00933 命令未正确结束。无论是命令,还是用工具都不行,最后发现问题是在约束名上面,这个约束的名字是 'BIN$50cuvhnkANTgQwoJwngA1A==$0' ,这个约束应该是建表时自动生成的名字,名字中有等号,而这个等号截断了sql语句,导致报错。经过一番查找,终于找到了解决办法,就是将这个名字用双引号括起来,就可以了,语句如下:
alter table TF_EN_EXAM_QUALIFICATION drop constraint "BIN$50cuvhnkANTgQwoJwngA1A==$0" cascade;
注意,一定要是双引号,单引号不行。具体原因为:
在Oracle中:双引号的作用是:假如建立对象的时候,对象名、字段名加双引号,则示意Oracle将严格区分大小写,否则Oracl都默认大写。
我平时在oracle中一直没用过双引号,现在终于知道双引号是这么用的了。哈哈,记录一下。
参考资料:
https://bbs.csdn.net/topics/391980058?page=1
https://www.cnblogs.com/gsk99/archive/2011/04/19/2021267.html