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

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

分类: oracle   2773人阅读  评论(0)  收藏  举报

问:

这代码中的冒号(:)是什么意思呢?
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;
/

--------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------


create or replace trigger table_triger
  before insert on table
  for each row
declare
  -- local variables here
begin
   IF INSERTING AND :NEW.ID IS NULL THEN
      SELECT table.NEXTVAL INTO :NEW.ID FROM SYS.DUAL;
    END IF;
  
end table_triger;






















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值