程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 關於Oracle處理DDL和DML語句的事務管理

關於Oracle處理DDL和DML語句的事務管理

編輯:Oracle教程

關於Oracle處理DDL和DML語句的事務管理


SQL主要程序設計語言

數據定義語言DDL(Data Definition Language) 如 create、alter、drop,

數據操作語言DML(Data Munipulation Language) 如 insert、update、delete,

數據控制語言DCL(Data Control Language) 如 grant、revoke

Connection conn = DBUtil.getConnection();
Statement st = null;
try {
    conn.setAutoCommit(false);  //關閉自動提交
    st = conn.createStatement();
    st.executeUpdate("alter table test rename column name to name2");  //①直接commit
    st.executeUpdate("alter table test rename column address too address2"); //②故意將to寫為too
    conn.commit();
} catch (SQLException e) {
    try {
       conn.rollback();  //③回滾
    } catch (SQLException e1) {
       e1.printStackTrace();
    }
} finally {
    DBUtil.closeAll(null, st, conn);
}

上面例子是執行修改字段名稱 ①正常執行,在②語句中故意產生錯誤,報異常然後跳到③

最後結果是 address未做修改,name已經修改為了name2

Oracle在執行DDL語句時會先執行commit,所以就不能對DDL語句進行回滾

如果非要進行回滾的話,可進行反向操作,就是在②出錯的時候再將①中的name改回去

如果語句很多的話,未免太麻煩。不知道有沒有方法可解決!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved