Oracle資料庫中的函數,包和觸發器

來源:互聯網
上載者:User

函數:

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

    • /**  計算年薪是多少?**/create or replace function paramFun(salary number) return  numberis 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;

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.