Oracle08

1.定义一个游标 用来存放 s_emp 表中的 id first_name salary

  使用 简单循环  结合  notfound 属性来遍历游标中的数据


2.写一个存储过程  定义两个整数参数  然后打印两个参数的最大值  并且把两个参数的和

  存入第二个参数中。调用这个存储过程 然后验证存储过程的功能。


----------------------------------------------------------------------------

1.写一个plsql的函数  有两个整数参数  返回两个参数的最大值


2.设计一个函数 有两个整数参数 返回参数的最大值  并且把两个参数的和存入第二个参数中

  调用这个函数 验证函数的功能

  create  or replace  function  getmax_and_sum(var_x  number,var_y in out number)

  return  number  is

  begin 

      if var_x < var_y  then

          var_y:=var_x+var_y; 

          return  var_y-var_x;

      end if;

          var_y:=var_x+var_y; 

          return  var_x;       

  end;

  /


  create  or replace  function  getmax_and_sum(var_x  number,var_y in out number)

  return  number  is

      var_temp  number;

  begin 

      var_temp:=var_y;

      var_y:=var_x+var_y;

      if var_x < var_temp  then

          return  var_temp;

      end if; 

          return  var_x;       

  end;

  /


  declare

      var_y  number:=1;

      var_res  number:=0;

  begin

      var_res:=getmax_and_sum(101,var_y);

      dbms_output.put_line(var_res);

      dbms_output.put_line(var_y);

  end;

  /

3.plsql 程序中的包

  3.1  概念

      把逻辑相关的 过程  函数  变量 等用逻辑结构组织起来  这个逻辑结构叫 package。

  3.2  使用包中的数据  在数据前 加包名点即可  #####

  3.3  系统提供的包

  dbms_output.put_line('gg'); 

  desc  dbms_output;  输出相关的包

  desc  dbms_random;  随机相关的包

  select  dbms_random.value(1,100)  from  dual; 

  select  trunc(dbms_random.value(1,100))  from  dual;

  desc  dbms_job;  定时任务包  可以定时调用存储过程

  desc  dbms_lob;  操作大数据类型的包 

  4.触发器  trigger

    4.1  概念

        当进行dml 操作时  数据库管理系统 可以捕获到这些操作

          进而可以根据这些操作 进行相应辅助操作。这种功能可以通过触发器完成。

    4.2 语法

    create  or  replace  trigger  触发器的名字  before|after 

    dml(insert | delete|update)  on 表名  |for each row

    declare

    begin

    end;

    /

    4.3 举例

    create  table  myemp101  as  select id,first_name name,salary from s_emp;     

    create or replace  trigger  myemp101_tri after update on myemp101

    declare

    begin

        dbms_output.put_line('you update myemp101');

    end;

    / 

    update  myemp101  set salary=salary+100 where id=1;

    update  myemp101  set salary=salary+100 where id>1;

    update  myemp101  set salary=salary+100 where id<1;


        无论sql语句影响多少行数据  都会触发一次  这种触发器叫语句级触发器。

      希望检测每一行的数据变化情况 可以使用  行级触发器  for each  row

    create or replace  trigger  myemp101_tri after update on myemp101 for each row

    declare

    begin

        dbms_output.put_line(:old.id||':'||:old.salary);

        dbms_output.put_line('you update myemp101');

        dbms_output.put_line(:new.id||':'||:new.salary);


    end;

    / 

    update  myemp101  set salary=salary+100 where id=1;

    update  myemp101  set salary=salary+100 where id>1;

    update  myemp101  set salary=salary+100 where id<1;

    update    :old      :new

    insert              :new

    delete    :old 

你可能感兴趣的:(Oracle08)