SQL高級語法——DML

一、WITH CHECK OPTION

INSERT INTO
  (SELECT EMPLOYEE_ID, LAST_NAME, EMAIL, HIRE_DATE, JOB_ID, SALARY
     FROM EMPLOYEES
    WHERE DEPARTMENT_ID = 50 WITH CHECK OPTION)
VALUES
  (123,
   'Ryan',
   '[email protected]',
   TO_DATE('2011-09-10', 'yyyy-mm-dd'),
   '10',
   5000);

二、WHEN THEN

INSERT
  WHEN MOD(OBJECT_ID, 2) = 1 THEN
       INTO T1(X, Y) VALUES(RN, OBJECT_ID)
  WHEN MOD(OBJECT_ID, 2) = 0 THEN
       INTO T2(X, Y) VALUES(RN, CREATED)
SELECT ROWNUM RN, OBJECT_ID, CREATED FROM ALL_OBJECTS

三、INSERT ALL

每個表都插入
  1. 無條件
    INSERT ALL
      INTO sal_history VALUES(empid, hiredate, sal)
      INTO mgr_history VALUES(empid, mgr, sal)
    SELECT employee_id empid, hire_date hiredate, salary sal, manager_id mgr
      FROM employees
     WHERE employee_id>200
  2. 有條件
    INSERT ALL
      WHEN sal>10000 THEN INTO sal_history VALUES (empid, hiredate, sal)
      WHEN mgr>200 THEN INTO mgr_history VALUES (empid, mgr, sal)
    SELECT employee_id empid, hire_date hiredate, salary sal, manager_id mgr
      FROM employees
     WHERE employee_id>200

三、INSERT FIRST

只插入首個滿足條件的表
INSERT FIRST
  WHEN sal>25000 THEN INTO special_sal VALUES (deptid, sal)
  WHEN hiredate LIKE ('%00%') THEN INTO hiredate_history_00 VALUES (deptid, hiredate)
  WHEN hiredate LIKE ('%99%') THEN INTO hiredate_history_99 VALUES (deptid, hiredate)
  ELSE INTO hiredate_history VALUES (deptid, hiredate)
SELECT department_id deptid, SUM(salary) sal, MAX(hire_date) hiredate
  FROM employees
 GROUP BY department_id

四、MERGE

MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
   ON (join condition)
 WHEN MATCHED THEN
      UPDATE 
         SET col1 = col_val1,
             col2 = col_val2
 WHEN NOT MACHED THEN
      INSERT (column_list)
      VALUES (column_values);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章