在 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
我在 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