oracle 存储过程深入学习与应用

  对于存储过程已经有过一周的学习时间了,但是之学到一些皮毛,争取根据基础,熟练后能进行深入。

--1、存储过程创建存储过程的语法:
  CREATE [
  OR
  REPLACE ]
  PROCEDURE procedure_name [
                            (
                                parameter_list
                            ) ] {IS | AS} [ local_declarations ]
      BEGIN
          executable_statements [
      EXCEPTION
          exception_handlers ]
      END [ procedure_name ];
      --其中:procedure_name是过程的名称。 parameter_list是参数列表。 local_declarations是局部声明。 executable_statements是可执行语句。 exception_handlers是异常处理程序。
      --示例1: 演示创建过程(参数列表中为IN参数赋予一个默认值,不能为OUT、IN OUT参数赋予默认值)
      create or replace procedure find_emp
                                          (
                                              emp_no in number := 7900
                                          )
      as
          empname varchar2(20);
      begin
          select
              ename
          into
              empname
          from
              emp
          where
              empno = emp_no
          ;
          
          dbms_output.put_line('雇员姓名是 '
          || empname);
      exception
      when no_data_found then
          dbms_output.put_line('雇员编号未找到');
      end find_emp;
      --调用过程:EXECUTE procudure_name(parameters_list);
      --也可以在过程里面调用,直接写上procudure_name而不必写EXECUTE。
      --示例2:演示创建带OUT参数的过程
      create or replace procedure test
                                      (
                                          value1 varchar2
                                        , value2 out number
                                      )
      is
          identity number;
      begin
          select
              sal
          into
              identity
          from
              emp
          where
              empno = value1
          ;
          
          if identity < 2000 then
              value2 := 1000;
          else
              value2 := 500;
          end if;
      end;
      --调用带OUT参数的过程:
      declare
          value2 number;
      begin
          test('7900', value2);
          dbms_output.put_line(value2);
      end;
      --示例3:演示创建带IN OUT参数的过程
      create or replace procedure swap
                                      (
                                          p1 in out number
                                        , p2 in out number
                                      )
      is
          v_temp number;
      begin
          v_temp := p1;
          p1     := p2;
          p2     := v_temp;
      end;
      --调用带IN OUT参数的过程:
      declare
          num1 number := 100;
          num2 number := 200;
      begin
          swap(num1, num2);
          dbms_output.put_line('num1= '
          || num1);
          dbms_output.p ut_line('num2= '
          || num2);
      end;
      --示例4:将过程的执行权限授予其他用户
      GRANT EXECUTE ON find_emp TO scott;
      GRANT EXECUTE ON swap TO PUBLIC;
      --将find_emp过程的执行权限授予给用户scott,将执行swap过程的权限授予所有数据库用户。
      --删除过程语法:
      DROP PROCEDURE procudure_name;

 

posted @ 2018-08-06 10:50  BeforeYou  阅读(863)  评论(0编辑  收藏  举报