Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set a default value when inserting null

I'm trying to set a default value for my customer table in Oracle.

This is my coding

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)
);

This is my insertion...

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');

When I run the program and I use the

select * from CUSTOMER

all the CUST_STATE from my table without any insertion value comes out a " - " instead of a default value 'NOT STATED', but when I run my program no errors were detected.

like image 771
computer NOOBs Avatar asked Apr 06 '26 17:04

computer NOOBs


1 Answers

If you really want the column to default to a non-null value, even if the INSERT statement has NULL for it, you can use the DEFAULT ON NULL syntax, e.g.:

ALTER TABLE CUSTOMER MODIFY CUST_STATE DEFAULT ON NULL 'NOT STATED';

or, if you are creating the table from scratch:

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)
);

Now, when you insert a row with NULL for that column:

INSERT INTO CUSTOMER VALUES ('C007','Gray','5/20/1999','');

The row will have 'NOT STATED' for CUST_STATE.

Note: this "NOT STATED" is known as a "magic value" and is generally considered bad practice. It would be better, if you want to show "NOT STATED" on the screen if no value was entered, to use a SQL expression such as NVL(CUST_STATE,'NOT STATED') at query time.

like image 161
Jeffrey Kemp Avatar answered Apr 09 '26 05:04

Jeffrey Kemp



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!