欢迎投稿

今日深度:

Oracle数据库中的函数,包和触发器

Oracle数据库中的函数,包和触发器


函数:

    • /**
      函数和存储过程非常的相似,唯一的不同的就是函数有返回值。
      **/
      
      create or replace function firstFun return varchar2
      is
       
      begin
        return 'Hello World';
      end firstFun;

    • /**
        计算年薪是多少?
      **/
      create or replace function paramFun(salary number) return  number
      is
       
      begin
        return salary*12;
      end paramFun;

    • /**
        这里是包头,主要是对数据的定义
      **/
      create or replace package firstPack is
         --定义一个变量
        v_bonus number:=200;
      --定义一个函数
        function yearSalary(salary number) return number;
        --定义一个存储过程
        procedure myrop;
        
      end firstPack;
      /**
      包主体:对申明的实现
      计算年薪
      年薪=月薪*12+奖金
      **/
      create or replace package body firstPack is
      
      --对包头申明函数的实现
       function yearSalary(salary number) return number 
         is
        begin
          return salary*12+v_bonus;--这里用到了前面申明的变量
        end;
      --对存储过程的实现
       procedure myrop is
         begin
           --向学生表插入一条数据
                 insert into tab_stu(stu_id,stu_name,stu_age,class_id) values(9,'凯南',21,2);
                 commit;
         end;
      end firstPack;



    •  。在例子中会说明。
    • /**
      创建一个触发器't_back_tab_sut'
      当表tab_stu中的记录执行删除操作之后执行
      **/
      
      create or replace trigger t_back_tab_sut
        after delete on tab_stu 
        --当行级触发器被触发时,如果要访问插入,更新或删除的记录中的值。可以使用
        --NEW:访问操作完成后的值。
        --Old:访问操作完成前的值。
        --也就是可以取到你插入或更新或删掉的新或旧的数据。
        referencing  new as new  old as old
        for each row --表示触发器是行级触发器
      declare
        r_tab_stu tab_stu%rowtype;
        
      begin
        --取到删除后的数据
        r_tab_stu.stu_id:=:old.stu_id;
        r_tab_stu.stu_name:=:old.stu_name;
        r_tab_stu.stu_age:=:old.stu_age;
        r_tab_stu.class_id:=:old.class_id;
        --插入到备份表中
        insert into tab_stu_back2(stu_id,stu_name,stu_age,class_id) 
        values(r_tab_stu.stu_id,r_tab_stu.stu_name,r_tab_stu.stu_age,r_tab_stu.class_id);
        --这里不能有commit语句
        --因为如果这里有commit的话,那用户执行的delete操作就不能回滚了。
        --可以理解为这里的insert和用户的delete语句是一个事务。
      end t_back_tab_sut;

www.htsjk.Com true http://www.htsjk.com/shujukunews/68.html NewsArticle Oracle数据库中的函数,包和触发器 函数: /**函数和存储过程非常的相,唯一的不同的就是函数有返回。**/create or replace function firstFun return varchar2is begin return 'Hello World';end firstFun; /** 计...
相关文章
    暂无相关文章
评论暂时关闭