我只是对某事感到好奇。让我说我有一个表,我将更新该值,然后将其删除,然后插入新的1。如果我以这种方式编写代码,这将非常容易:
UPDATE PS_EMAIL_ADDRESSES SET PREF_EMAIL_FLAG='N' WHERE EMPLID IN ('K0G004'); DELETE FROM PS_EMAIL_ADDRESSES WHERE EMPLID='K0G004' AND E_ADDR_TYPE='BUSN'; INSERT INTO PS_EMAIL_ADDRESSES VALUES('K0G004', 'BUSN', 'ABS@GNC.COM.BZ', 'Y');
但是,如果使用“ update”语句,它将更加容易。但我的问题是,有可能同时完成这3个步骤吗?
引用Oracle事务处理语句文档:
事务是一个逻辑的 原子工作单元 ,包含一个或多个SQL语句。事务对SQL语句进行分组,以使它们要么全部提交(这意味着它们已应用到数据库),要么全部回滚(这意味着它们从数据库中撤消了)。Oracle数据库为每个事务分配一个唯一的标识符,称为事务ID。
另外,引用Wikipedia交易帖子:
在计算机科学中,ACID(原子性,一致性,隔离性,持久性)是一组属性,可确保可靠地处理数据库事务。 原子性要求每个事务都是 “全部或全部” :如果事务的一部分失败,则整个事务都会失败,并且数据库状态将保持不变。
在计算机科学中,ACID(原子性,一致性,隔离性,持久性)是一组属性,可确保可靠地处理数据库事务。
原子性要求每个事务都是 “全部或全部” :如果事务的一部分失败,则整个事务都会失败,并且数据库状态将保持不变。
就您而言 ,您可以将所有三个句子括在一个事务中:
COMMIT; ''This statement ends any existing transaction in the session. SET TRANSACTION NAME 'my_crazy_update'; ''This statement begins a transaction ''and names it sal_update (optional). UPDATE PS_EMAIL_ADDRESSES SET PREF_EMAIL_FLAG='N' WHERE EMPLID IN ('K0G004'); DELETE FROM PS_EMAIL_ADDRESSES WHERE EMPLID='K0G004' AND E_ADDR_TYPE='BUSN'; INSERT INTO PS_EMAIL_ADDRESSES VALUES('K0G004', 'BUSN', 'ABS@GNC.COM.BZ', 'Y'); COMMIT;
这是满足您的要求 “一次完成所有句子” 的最佳方法。