整理 Oracle 開發與 DBA 日常最高頻的命令與語法,涵蓋資料型態建表、刪表、約束、視圖、Sequence、表間複製、資料字典查詢,適合貼在工位隨查隨用。
-- CHAR 固定長度 (不足補空格)
CREATE TABLE test1 (name CHAR(10), sex CHAR(1));
INSERT INTO test1 VALUES ('tomcatt北京','f'); -- 會截斷或報錯
-- NCHAR 國家字符集固定長度
CREATE TABLE test2 (name NCHAR(10), sex NCHAR(1));
INSERT INTO test2 VALUES ('tomcatt北京','男');
-- VARCHAR2 可變長度 (推薦)
CREATE TABLE test3 (name VARCHAR2(10), sex VARCHAR2(2));
INSERT INTO test3 VALUES ('tomcatt北京','f');
-- NUMBER(p,s) p=精度 s=小數位
CREATE TABLE test4 (name VARCHAR2(10), age NUMBER(3), salary NUMBER(8,2));
-- DATE 日期時間
CREATE TABLE test5 (name VARCHAR2(10), birth DATE);
INSERT INTO test5 VALUES ('Tom','28-2月-08');
INSERT INTO test5 VALUES ('Allen',SYSDATE);
-- 建表含預設值
CREATE TABLE scott.test6 (
eid NUMBER(10),
name VARCHAR2(20),
hiredate DATE DEFAULT SYSDATE,
salary NUMBER(8,2) DEFAULT 0
);
-- 刪表
DROP TABLE table_name;
-- 修改欄位
ALTER TABLE test MODIFY (addd VARCHAR2(10) NULL);
ALTER TABLE test ADD (age VARCHAR2(5));
-- 域完整性
ALTER TABLE t ADD CONSTRAINT chk_age CHECK (age > 0);
ALTER TABLE t MODIFY name NOT NULL;
-- 實體完整性
ALTER TABLE t ADD CONSTRAINT pk_t PRIMARY KEY (id);
ALTER TABLE t ADD CONSTRAINT uk_t_name UNIQUE (name);
-- 參照完整性
ALTER TABLE child ADD CONSTRAINT fk_child_parent
FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE;
CREATE OR REPLACE VIEW v1 (eid, name, salary) AS
SELECT empno, ename, sal FROM emp WHERE deptno = 30;
CREATE SEQUENCE myseq INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE;
INSERT INTO test VALUES (myseq.NEXTVAL, 'tom');
CREATE SEQUENCE student_seq START WITH 1 INCREMENT BY 1;
INSERT INTO student VALUES (student_seq.NEXTVAL, 'john');
INSERT INTO dept1 (id, name) SELECT deptno, dname FROM dept;
-- 當前用戶表
SELECT * FROM user_tables;
SELECT * FROM all_tables; -- 可存取的所有表
-- 當前用戶物件
SELECT object_name, object_type FROM user_objects;
-- 索引、視圖
SELECT index_name FROM user_indexes;
SELECT view_name FROM user_views;
CREATE TABLE test2 (id CHAR(10) PRIMARY KEY NOT NULL, name CHAR(10));
CREATE SEQUENCE test2_seq INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE;
INSERT INTO test2 VALUES (test2_seq.NEXTVAL, 'john');
-- 批次插入 10 筆...
SELECT * FROM test2;
DESC table_name; -- SQL*Plus / PLSQL Dev
-- 或
SELECT column_name, data_type, data_length, nullable
FROM user_tab_columns WHERE table_name = 'TABLE_NAME';
收藏此手冊,涵蓋 90% 日常 Oracle 操作語法,新手入門、資深複習皆宜。