[to_char的数字的oracle sql检查约束

问题描述 投票:0回答:1

这是我在oracle live sql网站上输入的一项家庭作业问题:

Create table student (regno number (6), mark number (3) constraint b check (mark >=0 and
mark <=100));
Alter table student add constraint b2 check (length(regno<=4));

它一直向Alter的第二行抛出“缺少右括号”错误。我在其他地方读过,这是语法上的一般错误,但是对我来说,即使我将源材料中的代码复制并粘贴到SQL工作表中或现在重新键入它大约20次,我仍然会收到错误。

我还尝试将字符强制转换为char,因为regno是一个数字。

Alter table student add constraint b2 check (length(to_char(regno)<=4));

但是我遇到同样的错误。

oracle constraints
1个回答
0
投票

比较运算符(<=)应该在length函数之外:

SQL> CREATE TABLE STUDENT (
  2      REGNO   NUMBER(6),
  3      MARK    NUMBER(3)
  4          CONSTRAINT B CHECK ( MARK >= 0
  5                               AND MARK <= 100 )
  6  );

Table created.

SQL> -- Solution of the question
SQL> ALTER TABLE STUDENT
  2      ADD CONSTRAINT B2 CHECK ( LENGTH(REGNO) <= 4 );

Table altered.

SQL>

一个建议,如果要将REGNO限制为仅4位,则将REGNO的数据类型转换为NUMBER(4)

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.