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

    结果:

     

  • 相关阅读:
    针式PKM软件进入华军分类下载月排名前6名
    读取xml
    一个简单的记事本程序
    python输出重定向
    重看ATL布幔之下的秘密
    nginx学习(二)动态加载各模块
    ngx_queue的理解
    nginx学习(三)IOCP的使用
    nginx学习(一)内存
    使用python实现一个通用协议测试工具
  • 原文地址:https://www.cnblogs.com/nuaaydh/p/4421165.html
Copyright © 2020-2023  润新知