sql - 插入null时如何设置默认值
问题描述
我正在尝试为我在 Oracle 中的客户表设置默认值。
这是我的编码
CREATE TABLE CUSTOMER
(
CUST_ID VARCHAR(10),
CUST_NAME VARCHAR(20) NOT NULL UNIQUE,
CUST_DOB DATE NULL,
CUST_STATE VARCHAR(20) DEFAULT 'NOT STATED',
PRIMARY KEY(CUST_ID)
);
这是我的插入...
INSERT INTO CUSTOMER VALUES ('C001','Murphy','1/30/1989','Melaka');
INSERT INTO CUSTOMER VALUES ('C002','Cooper','4/20/1993','Selangor');
INSERT INTO CUSTOMER VALUES ('C003','Richard','','Perak');
INSERT INTO CUSTOMER VALUES ('C004','Howard','6/24/1997','Johor');
INSERT INTO CUSTOMER VALUES ('C005','Torres','8/3/1983','Negeri Sembilan');
INSERT INTO CUSTOMER VALUES ('C006','Peterson','12/31/1990','Kedah');
INSERT INTO CUSTOMER VALUES ('C007','Gray','5/20/1999','');
INSERT INTO CUSTOMER VALUES ('C008','James','','');
INSERT INTO CUSTOMER VALUES ('C009','Watson','10/9/1993','Sabah');
INSERT INTO CUSTOMER VALUES ('C010','Brooks','9/17/1989','Terengganu');
INSERT INTO CUSTOMER VALUES ('C011','Kelly','8/23/1997','Perlis');
INSERT INTO CUSTOMER VALUES ('C012','Wendy','','');
INSERT INTO CUSTOMER VALUES ('C013','Perry','7/18/1993','Selangor');
INSERT INTO CUSTOMER VALUES ('C014','Alexander','2/13/1980','Kelantan');
INSERT INTO CUSTOMER VALUES ('C015','Gladys','','Sarawak');
当我运行程序并使用
select * from CUSTOMER
我的表中没有任何插入值的所有CUST_STATE
内容都出现“ - ”而不是默认值“未说明”,但是当我运行我的程序时没有检测到错误。
解决方案
如果您确实希望该列默认为非空值,即使 INSERT 语句为其设置了 NULL,您也可以使用 DEFAULT ON NULL 语法,例如:
ALTER TABLE CUSTOMER MODIFY CUST_STATE DEFAULT ON NULL 'NOT STATED';
或者,如果您从头开始创建表:
CREATE TABLE CUSTOMER
(
CUST_ID VARCHAR(10),
CUST_NAME VARCHAR(20) NOT NULL UNIQUE,
CUST_DOB DATE NULL,
CUST_STATE VARCHAR(20) DEFAULT ON NULL 'NOT STATED',
PRIMARY KEY(CUST_ID)
);
现在,当您为该列插入 NULL 行时:
INSERT INTO CUSTOMER VALUES ('C007','Gray','5/20/1999','');
该行将具有'NOT STATED'
for CUST_STATE
。
注意:这个“NOT STATED”被称为“magic value”,通常被认为是不好的做法。如果您想在未输入任何值的情况下在屏幕上显示“NOT STATED”,那么最好NVL(CUST_STATE,'NOT STATED')
在查询时使用 SQL 表达式。
推荐阅读
- ios - 可用于 API 请求的编码
- azure - 安装 Azure 备份服务器崩溃并出现错误 4387
- testing - 如何在赛普拉斯中使用 .should 和“closeTo”断言?
- flutter - 谷歌地图在 SliverAppBar 中滞后
- excel - 如何删除包含少于特定字符数的单元格的 Excel 行?
- excel - 如果值为 *true*,如何在 Excel-2010 中使用 **row()** 函数和 **if()** 语句返回行号
- javascript - 运算符 '+' 不能应用于类型 'number[]' :如何更正构建错误?
- python - 在 python 中使用 Selenium 在 Headless chrome 中下载文件时文件未保存
- c# - 如果值为`YES`或`NO`,需要检查条件。对于无效值,它应该抛出一些错误消息
- foreach - 解压缩平面文件并将其存储在数据库中