【问题标题】:Is adding a column and a constraint at the same time while modifying an Oracle table possible?是否可以在修改 Oracle 表时同时添加列和约束?
【发布时间】:2019-06-25 06:39:54
【问题描述】:

我有一个任务要求我向表中添加一列并给它一个约束。

"将数据类型为 NUMBER(7,2) 的名为 Base_Salary 的列添加到 store_reps 表。确保输入的金额大于 0。”

我认为这很简单,但也许我必须 ALTER 表两次,一次用于新列,另一次用于添加约束?这似乎是多余的和低效的。

我试过去掉第二个“添加”并移动括号,移动逗号,我所做的一切似乎都有类似的错误。

这是我的尝试:

ALTER TABLE store_reps; 
 ADD (Base_Salary NUMBER(7, 2)),
 ADD CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0);

我收到一个错误

ADD CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0)
ERROR report - 
UNKNOWN COMMAND

还有一个:

Error starting at line : 74 in command -
ALTER TABLE store_reps 
 ADD (Base_Salary NUMBER(7, 2)),
 CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0)
Error report -

非常感谢任何帮助。几周前我刚开始使用 SQL,而且非常菜鸟。

【问题讨论】:

    标签: sql oracle constraints alter-table


    【解决方案1】:

    您的查询包含两个需要修复的语法问题:

    • 去掉CONSTRAINT之前的逗号
    • 去掉Base_Salary NUMBER(7, 2)周围多余的一对大括号

    工作示例:

    create table store_reps (id number);
    
    ALTER TABLE store_reps 
     ADD Base_Salary NUMBER(7, 2)
     CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0);
    

    【讨论】:

    • 谢谢,这非常有用。我很高兴您可以轻松找出我的语法错误。这似乎对我有用: ADD (Base_Salary NUMBER(7, 2) CONSTRAINT store_reps_Base_Salary CHECK (Base_Salary>0));即使它按我的预期运行,它仍然是不正确的语法吗?
    • 应该没问题 - 恕我直言,这只是个人喜好问题。
    • 请注意 CHECK 约束接受 NULL 值。您的 BASE_SALARY 列可能包含 NULL。如果您不想要 NULL,则需要包含 NOT NULL 约束。
    【解决方案2】:
    create table tr (col1 number);
    
    alter table tr add col2 varchar2(100) constraint tr_cons CHECK (col2 = 'a');
    

    DB Fiddle demo

    干杯!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多