關於資料處理語言 (DML) 敘述句

資料處理語言 (DML) 陳述式存取並處理現有表格中的資料。

在 SQL*Plus 環境中,您可以在 SQL> 提示之後輸入 DML 敘述句。

在 SQL Developer 環境中,您可以在「工作表」中輸入 DML 敘述句。或者,您也可以使用 SQL Developer Connections 框架和工具來存取和操作資料。

若要在 SQL Developer 中查看 DML 陳述式的效果,您可能需要在「連線」框架中選取變更物件的結構描述物件類型,然後按一下「重新整理」圖示。

DML 敘述句的效果要到您確認包括它的交易之後才會變成永久。交易是 Oracle Database 視為一個單位的一系列 SQL 敘述句 (可以是單一 DML 敘述句)。交易要確認之後才可以倒回 (還原)。如需有關交易的詳細資訊,請參閱「關於交易控制對帳單」。

另請參閱:Oracle Database SQL Language Reference,瞭解 DML 敘述句的詳細資訊

關於 INSERT 敘述句

INSERT 陳述式會將列插入現有的表格。

INSERT 敘述句建議的最簡單格式具有下列語法:

INSERT INTO table_name (list_of_columns)
VALUES (list_of_values);

list_of_columns 中的每個資料欄在 list_of_values 的對應位置中都必須有一個有效值。因此,在您將資料列插入表格之前,必須知道表格有什麼資料欄,以及有效值為何。要使用 SQL Developer 取得此資訊,請參見「教學課程:檢視 EMPLOYEES 表格屬性與資料 (SQL Developer) 」。若要使用 SQL*Plus 取得此資訊,請使用 DESCRIBE 敘述句。舉例而言:

DESCRIBE EMPLOYEES;

結果:

Name                                      Null?    Type
----------------------------------------- -------- ------------

EMPLOYEE_ID                               NOT NULL NUMBER(6)
FIRST_NAME                                         VARCHAR2(20)
LAST_NAME                                 NOT NULL VARCHAR2(25)
EMAIL                                     NOT NULL VARCHAR2(25)
PHONE_NUMBER                                       VARCHAR2(20)
HIRE_DATE                                 NOT NULL DATE
JOB_ID                                    NOT NULL VARCHAR2(10)
SALARY                                             NUMBER(8,2)
COMMISSION_PCT                                     NUMBER(2,2)
MANAGER_ID                                         NUMBER(6)
DEPARTMENT_ID                                      NUMBER(4)

範例 3-1 中的 INSERT 陳述式會為已知所有欄值的員工,將列插入 EMPLOYEES 表。

您不需知道所有欄值,才能將列插入表格中,但必須知道所有「非空值」欄的值。如果您不知道可以為空值的資料欄值,可以從 list_of_columns 省略該資料欄。其值預設為 NULL。

範例 3-2 中的 INSERT 敘述句會將一列插入員工的 EMPLOYEES 表格中,除了 SALARY 之外,所有資料欄值都是已知的。現在,SALARY 的值可以是 NULL。當您知道薪資時,可以使用 UPDATE 陳述式來變更薪資 (請參閱範例 3-4)。

範例 3-3 中的 INSERT 敘述句會嘗試將一列插入員工的 EMPLOYEES 表格中,其中 LAST_NAME 不明。

範例 3-1 當所有資訊都可用時使用 INSERT 陳述式

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,
  LAST_NAME,
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,
  SALARY,
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  10,              -- EMPLOYEE_ID
  'George',        -- FIRST_NAME
  'Gordon',        -- LAST_NAME
  'GGORDON',       -- EMAIL
  '650.506.2222',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  9000,            -- SALARY
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

結果:

1 row created.

範例 3-2 當非所有資訊皆可用時使用 INSERT 陳述式

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,
  LAST_NAME,
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,          -- Omit SALARY; its value defaults to NULL.
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  20,              -- EMPLOYEE_ID
  'John',          -- FIRST_NAME
  'Keats',         -- LAST_NAME
  'JKEATS',        -- EMAIL
  '650.506.3333',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

結果:

1 row created.

範例 3-3 使用不正確的 INSERT 陳述式

INSERT INTO EMPLOYEES (
  EMPLOYEE_ID,
  FIRST_NAME,      -- Omit LAST_NAME (error)
  EMAIL,
  PHONE_NUMBER,
  HIRE_DATE,
  JOB_ID,
  COMMISSION_PCT,
  MANAGER_ID,
  DEPARTMENT_ID
)
VALUES (
  20,              -- EMPLOYEE_ID
  'John',          -- FIRST_NAME
  'JOHN',          -- EMAIL
  '650.506.3333',  -- PHONE_NUMBER
  '01-JAN-07',     -- HIRE_DATE
  'SA_REP',        -- JOB_ID
  .1,              -- COMMISSION_PCT
  148,             -- MANAGER_ID
  80               -- DEPARTMENT_ID
);

結果:

ORA-01400: cannot insert NULL into ("HR"."EMPLOYEES"."LAST_NAME")

另請參閱:

關於 UPDATE 敘述句

UPDATE 陳述式會更新 (變更現有表格列集合的值)。

UPDATE 陳述式的簡單形式具有下列語法:

UPDATE table_name
SET column_name = value [, column_name = value]...
[ WHERE condition ];

每個值必須對其 column_name 有效。如果包含 WHERE 子句,敘述句只會更新滿足條件之列中的欄值。

範例 3-4 中的 UPDATE 敘述句會在已知員工薪資之前,更新插入範例 3-2 中 EMPLOYEES 表格之資料列中 SALARY 資料欄的值。

範例 3-5 中的 UPDATE 陳述式會更新部門 80 中每位員工的佣金百分比。

範例 3-4 使用 UPDATE 陳述式來新增資料

UPDATE EMPLOYEES
SET SALARY = 8500
WHERE LAST_NAME = 'Keats';

結果:

1 row updated.

範例 3-5 使用 UPDATE 陳述式來更新多個列

UPDATE EMPLOYEES
SET COMMISSION_PCT = COMMISSION_PCT + 0.05
WHERE DEPARTMENT_ID = 80;

結果:

34 rows updated.

另請參閱:

關於 DELETE 敘述句

DELETE 陳述式會刪除表格中的列。

DELETE 陳述式的簡單格式具有下列語法:

DELETE FROM table_name [ WHERE condition ];

如果包含 WHERE 子句,陳述式只會刪除滿足條件的列。如果您省略 WHERE 子句,該敘述句就會刪除表格中的所有資料列,但空白表格仍然存在。若要刪除表格,請使用 DROP TABLE 陳述式。

範例 3-6 中的 DELETE 敘述句會刪除範例 3-1範例 3-2 中插入的資料列。

使用 DELETE 敘述句的範例 3-6

DELETE FROM EMPLOYEES
WHERE HIRE_DATE = TO_DATE('01-JAN-07', 'dd-mon-yy');

結果:

2 rows deleted.

另請參閱: