oracle 如何用触发器实现更新刚插入的数据集合

1、建立测试表

create table TEST_TB

(

  ID   NUMBER,

  WLID NUMBER,

  PM   VARCHAR2(100),

  DJZT VARCHAR2(10),

  SL   NUMBER,

  PH   VARCHAR2(100)

);

 

2、建立带ref cursor定义的包和包体及函数:

CREATE OR REPLACE

package pkg_test as

/* 定义ref cursor类型

   不加return类型,为弱类型,允许动态sql查询,

   否则为强类型,无法使用动态sql查询;

*/

  type myrctype is ref cursor; 

--函数申明

  function get(intID number) return myrctype;

end pkg_test;

create or replace package body pkg_test as

--函数体

   function get(intID number) return myrctype is

     rc myrctype;  --定义ref cursor变量

     sqlstr varchar2(500);

   begin

     --if intID=0 then

        --静态测试,直接用select语句直接返回结果

      --  open rc for select id,name,sex,address,postcode,birthday from student;

     --else

        --动态sql赋值,用:w_id来申明该变量从外部获得

        sqlstr := ‘select ph,pm from wlzd_tb where id =:1‘;

        --动态测试,用sqlstr字符串返回结果,用using关键词传递参数

       open rc for sqlstr using intid;

--     end if; 

     return rc;

   end get; 

end pkg_test;

 

3、创建触发器:

create or replace trigger test_tg

before insert

on test_tb

for each row  

declare

w_rc    pkg_test.myrctype; --定义ref cursor型变量

 

begin

  w_rc := pkg_test.get(:new.wlid);

loop

 fetch w_rc into :new.ph,:new.pm;

 exit when w_rc%notfound;

--:new.pm := ref.pm;

--:new.ph := test_fc(:new.wlid).ph;

end loop;

end; 

4、测试:

insert into test_tb(id,wlid) values(10,345) 

结果:

 技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。