如何在Oracle的名字的第一个字母上设置检查约束

时间:2014-07-15 22:18:38

标签: sql oracle check-constraints

我是SQLPlus的新手,我想在存储名称的列上强制执行CHECK CONSTRAINT。

我希望约束不允许输入以Q开头的名称。

这就是我所拥有的:

ALTER TABLE table1 ADD CONSTRAINT table1_name_ck CHECK( name, substr(1,1) ='q');

我收到了错误:

cannot validate (USER1.TABLE1_NAME_CK) - check constraint violated

AND错误

CHECK( name, substr(1,1) ='q')
        *
ERROR at line 2:
ORA-00920: invalid relational operator.

我无法弄清楚如何修复这些错误或找到正确的方法来实现它。任何意见,将不胜感激!谢谢!。我不认为这个代码适用于小写q和大写Q但我现在只是尝试一下。

1 个答案:

答案 0 :(得分:2)

您需要将列传递给substr来电:

ALTER TABLE table1 
   ADD CONSTRAINT table1_name_ck CHECK( substr(name, 1,1) ='q' );

要使大写和小写有效,你需要加强一点:

ALTER TABLE table1 
   ADD CONSTRAINT table1_name_ck CHECK( substr(name, 1,1) NOT IN ('q','Q') );