WEB开发网
开发学院数据库Oracle 从SQL SERVER 向ORACLE 8迁移的技术实现方案(2) 阅读

从SQL SERVER 向ORACLE 8迁移的技术实现方案(2)

 2008-09-08 12:52:54 来源:WEB开发网   
核心提示:(4)触发器的主体是一个PL/SQL块,在PL/SQL块中可以使用的所有语句在触发器主体中都是合法的,从SQL SERVER 向ORACLE 8迁移的技术实现方案(2),但是要受到下面的限制:1> 触发器不能使用事务控制语句,包括COMMIT、ROLLBACK或SAVEPOINT,将外键相关联的表称为限制表,则在

(4)触发器的主体是一个PL/SQL块,在PL/SQL块中可以使用的所有语句在触

发器主体中都是合法的,但是要受到下面的限制:

1> 触发器不能使用事务控制语句,包括COMMIT、ROLLBACK或

SAVEPOINT。ORACLE保持这种限制的原因是:如果触发器遇到错误时,

由触发器导致的所有数据库变换均能被回滚(roll back)取消;但如果

触发器确认(commit)了对数据库进行的部分变换,ORACLE就不能完全

回滚(roll back)整个事务。

2> 在触发器主体中调用到的存储过程的实现语句里也不能使用事务控制语

句。

3> 触发器主体不能声明任何LONG或LONG RAW变量。而且,:new和:old

不能指向定义触发器的表中的LONG或LONG RAW列。

4> 当声明触发器的表中有外键约束时,如果将定义触发器的表和需要作为

DELETE CASCADE参考完整性限制的结果进行更新的表称为变化表,

将外键相关联的表称为限制表,则在此触发器主体中的SQL语句不允许

读取或修改触发语句的任何变化表,也不允许读取或修改限制表中的主

键、唯一值列或外键列。

(5)以下是建立一个事前插入触发器的示例:

CREATE OR REPLACE TRIGGER Credit_Charge_Log_Ins_Before
BEFORE insert ON Credit_Charge_Log
FOR EACH ROW
DECLARE
Total_for_past_3days number ;
BEGIN
-- Check the credit charges for the past 3 days.
-- If they total more than $1000.00, log this entry
-- int the Credit_Charge_Attempt_Log for further handling.
select sum ( amount ) into total_for_past_3days
from Credit_Charge_Log
where Card_Number = :new.Card_Number
and Transaction_Date >= sysdate – 3;
IF total_for_past_3days > 1000.00 THEN
insert into credit_Charge_Attemp_Log
(Card_Number, Amount, Vendor_ID, Transaction_Date)
values
(:new.Card_Number, :new.Amount,
:new.Vendor_ID, :new.Transaction_Date);
END IF ;
END ;

1 2 3 4 5 6  下一页

Tags:SQL SERVER ORACLE

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接