• 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) 

    结果:

     

  • 相关阅读:
    <转>程序员的心理疾病
    lua与c++ 中布尔布bool值对应关系
    php根据身份证号码计算年龄
    Java中List与Map初始化的一些写法
    在ASP.NET中发送电子邮件的实例教程
    C#中Messagebox.Show()常用参数用法详解
    Js判断CSS文件加载完毕的实例教程
    PHP CURL访问HTTPS使用详解
    下拉导航菜单被遮住解决办法
    Struts2基本包作用详解
  • 原文地址:https://www.cnblogs.com/nuaaydh/p/4421165.html
Copyright © 2020-2023  润新知