在 NULL 1 上更改默认值时缺少表达式

Missing Expression when Alter Default on NULL 1

我在 table 书中有专栏...命名为状态...我想设置默认值 1...

但是,我尝试了默认 1, ALTER TABLE book MODIFY status DEFAULT 1 然后我插入新记录...记录状态为 null

我尝试使用 默认值 null 1

ALTER TABLE book MODIFY status DEFAULT ON NULL 1;

输出:ORA-00936:缺少表达式

我该怎么办?如果我希望状态值默认为 1,插入新记录时不为空

您的 ALTER TABLE book MODIFY status DEFAULT ON NULL 1; 语句有效 (from Oracle 12.0.1 onwards):

CREATE TABLE book (
  id     INT
         GENERATED ALWAYS AS IDENTITY
         PRIMARY KEY,
  status NUMBER(1)
);

ALTER TABLE book MODIFY status DEFAULT ON NULL 1;

INSERT INTO book ( status ) VALUES ( NULL );
INSERT INTO book ( status ) VALUES ( 0 );
INSERT INTO book ( status ) VALUES ( 1 );

然后:

SELECT * FROM book;

输出:

ID | STATUS
-: | -----:
 1 |      1
 2 |      0
 3 |      1

db<>fiddle here


如果您使用的是 12.0.1 之前的数据库版本,那么您也可以使用触发器:

CREATE TRIGGER book__status_is_null__trg
BEFORE INSERT OR UPDATE ON book FOR EACH ROW
BEGIN
  IF :new.status IS NULL THEN
    :new.status := 1;
  END IF;
END;
/

db<>fiddle here