【问题标题】:How do I put a check constraint on the first letter of names in Oracle如何在 Oracle 中对名称的第一个字母进行检查约束
【发布时间】:2016-05-19 16:42:01
【问题描述】:

我是 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,但我现在只是在尝试。

【问题讨论】:

  • 我们要不要警告昆汀?

标签: sql oracle check-constraints


【解决方案1】:

您需要将该列传递给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') );

【讨论】:

  • not in,确定吗?问题是 not 允许以 Q 开头,尽管尝试使用 =。 OP 使用 = 而不是 != 也可能导致“无法验证”错误,至少如果该约束有效...
  • 谢谢!我试过了,它仍然给我无法验证 - 检查约束违反错误?你知道怎么解决吗?
  • 这意味着您在该列中有不以qQ 开头的值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多