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) 

结果:

 

posted @   知行一体2  阅读(1588)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示