在Oracle数据库中,为列设置默认值是一种常见的需求,可以简化数据插入操作并确保数据一致性。以下是Oracle中设置默认值的各种方法及其详细说明。
CREATE TABLE table_name (
column1 datatype DEFAULT default_value,
column2 datatype DEFAULT default_value,
...
);
CREATE TABLE employees (
emp_id NUMBER PRIMARY KEY,
emp_name VARCHAR2(100) NOT NULL,
hire_date DATE DEFAULT SYSDATE,
status VARCHAR2(20) DEFAULT 'ACTIVE',
bonus NUMBER(10,2) DEFAULT 0
);
ALTER TABLE table_name
MODIFY column_name DEFAULT default_value;
ALTER TABLE employees
MODIFY bonus DEFAULT 1000;
Oracle支持多种类型的默认值:
DEFAULT 100
, DEFAULT 'ACTIVE'
DEFAULT SYSDATE
, DEFAULT USER
DEFAULT sequence_name.NEXTVAL
DEFAULT (expression)
CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1;
CREATE TABLE employees (
emp_id NUMBER DEFAULT emp_seq.NEXTVAL,
emp_name VARCHAR2(100)
);
CREATE TABLE orders (
order_id NUMBER,
order_date DATE DEFAULT SYSDATE,
expected_ship_date DATE DEFAULT (SYSDATE + 2),
created_by VARCHAR2(30) DEFAULT USER
);
当列设置了NOT NULL约束且没有显式提供值时,默认值会被使用:
CREATE TABLE products (
product_id NUMBER PRIMARY KEY,
product_name VARCHAR2(100) NOT NULL,
stock_quantity NUMBER DEFAULT 0 NOT NULL
);
ALTER TABLE employees
MODIFY hire_date DEFAULT TRUNC(SYSDATE);
将默认值设置为NULL即可删除:
ALTER TABLE employees
MODIFY bonus DEFAULT NULL;
插入行为:
默认值在数据字典中的存储:
USER_TAB_COLUMNS
视图查看默认值设置SELECT column_name, data_default
FROM user_tab_columns
WHERE table_name = 'EMPLOYEES';
默认值不会影响已有数据,只对新插入的数据有效
Oracle 12c引入了ON NULL子句,可以在显式插入NULL时也使用默认值:
CREATE TABLE test_table (
id NUMBER,
status VARCHAR2(10) DEFAULT 'PENDING' ON NULL
);
可以为虚拟列指定默认值:
CREATE TABLE sales (
amount NUMBER,
tax_rate NUMBER,
tax_amount NUMBER GENERATED ALWAYS AS (amount * tax_rate) VIRTUAL,
total_amount NUMBER GENERATED ALWAYS AS (amount * (1 + tax_rate)) VIRTUAL
);
通过合理使用默认值,可以简化应用程序代码,确保数据一致性,并提高数据库操作的效率。