0

这是我在 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));

但我得到同样的错误。

4

1 回答 1

2

您的比较运算符(<=)应该在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 位数字,那么将数据类型转换REGNONUMBER(4)

干杯!!

于 2020-01-23T05:12:05.130 回答