您的位置:首页 > 数据库 > Oracle

oracle冒号问题联系触发器中new和old的冒号问题':'

2012-04-08 22:45 357 查看
问:

这代码中的冒号(:)是什么意思呢?

VARIABLE x REFCURSOR

EXEC authors_sel(:x)

print x

答:

x 是一个主变量

主变量是一个声明在主环境中的变量,它会被传递到一个或多个PL/SQL程序中,

在程序中可以跟其他的变量一样使用。

SQL*Plus和PL/SQL都能引用主变量,SQL*Plus还可以显示主变量的值。

但是,在PL/SQL中引用主变量的时候,我们必须加上冒号(:)前缀

:x表示引用sqlplus中定义的变量

触发器 new 和 old 修饰符



²OLD和NEW修饰符只用于记录级触发器。
²在SQL和PL/SQL语句中,OLD和NEW前面要加“:”。
²在WHEN限制语句中,OLD和NEW前面不要加“:”,因为WHEN子句在PL/SQL块的外部。
²注意:如果对大表做大量DML操作,记录级触发器会影响数据库性能。
²注意:记录级触发器中,不能从正在被修改的表中读取数据。

例子:
CREATE OR REPLACE TRIGGER derive_commission_pct

BEFORE INSERT OR UPDATE OF sal ON emp

FOR EACH ROW

WHEN (NEW.job = 'SALESMAN')

BEGIN

IF INSERTING

THEN :NEW.comm :=0;

ELSIF :OLD.comm IS NULL

THEN :NEW.comm := 0;

ELSE :NEW.comm := :OLD.comm * 1.05;

END IF;

END;

/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐