如何在现有列上添加默认约束,该约束适用于oracle

时间:2016-04-12 11:27:55

标签: oracle

我有以下数据表

create table emp_status(
    empno number,
    status varchar2(10)
    );
insert into emp_status values(100,null);
insert into emp_status values(200,null);
alter table emp_status modify status default 'Active';

select * from emp_status;
    empno status
    100   null
    200   null

我没有看到默认值,例如' Active'以上记录。

2 个答案:

答案 0 :(得分:1)

您正在插入值明确表示将NULL插入列status;这样,您没有使用默认值。 如果您需要具有默认值的列并希望避免使用空值,则可以向列中添加NOT NULL约束:

create table emp_status(
    empno number,
    status varchar2(10)
    );

alter table emp_status modify status default 'Active' NOT NULL;

现在,您可以插入您的值,而不必指定status的值:

SQL> insert into emp_status(empNo) values(100);

1 row created.

SQL> select status from emp_status;

STATUS
----------
Active

并且您不能使用NULL status

插入行
SQL> insert into emp_status(empNo, status) values(200, null);
insert into emp_status(empNo, status) values(200, null)
                                                  *
ERROR at line 1:
ORA-01400: cannot insert NULL into ("ALEK"."EMP_STATUS"."STATUS")

答案 1 :(得分:0)

当您将默认值更改为'有效' 当未指定此列时,Oracle会将此值分配给您尝试插入的新行,例如:

insert into emp_status (empno) values(100);

要更新以前插入的行,您可以使用update语句:

update emp_status set  status = 'Active' where status is null;