oracle约束名中有特殊符号无法删除约束

今天遇到一个问题,本地数据库一个表中无法插入数据,检查发现是因为表中一个字段有检查约束,但是因为字符集的问题,约束条件中的中文变成了???,所以一直报错,问题很明显,重建这个约束就可以了,但是麻烦的是在删除这个约束的时候报错  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

原文地址:https://www.cnblogs.com/anningkang/p/13602507.html