Oracle--存储过程(重要)

存储过程

之前的PL/SQL块, 匿名的PL/SQL 没有名字, 数据库不会存储, 每一次执行: 都要经过编译-运行
存储过程: 都是命名的PL/SQL, 存储在数据库中,作为数据库的一个对象,类似表, 只需要第一次把这个存储过程
编译(把这个存储过程保存到数据库), 后面调用存储过程, 不需要进行再编译, 直接运行
-- 关键字: Procedure

语法:

create [or replace] procedure 存储过程名
        [(参数1 model 类型1,参数2  model 类型2,.....)]
   is/as
        [变量。游标声明]
   begin  --相当于java中的{
          --执行语句
   [exception
        --异常处理
   ]
   end; 

注意: 存储过程: 变量的声明, 游标声明,...  写在is/as 之后, 没有declare

参数列表:  参数名   model(IN: 输入参数, out:输出参数, inout: 输入输出参数, 数据的转换)    数据类型

无参的存储过程:例:

--编写一个无参的存储过程,  查询7788员工姓名,薪水
--选中这个存储过程, 点执行,  编译存储过程, 并且把存储过程保存到数据库
-- 我们还需要查看这个存储过程是否有错误, 有错误,一定需要修改, 修改之后一定在一次编译
create or replace procedure  proc_findNameAndSal 
is
  --定义变量
  v_ename emp.ename%type;
  v_sal emp.sal%type;
begin
  select ename , sal into v_ename,v_sal from emp where empno = 7788;
  
  dbms_output.put_line(v_ename||v_sal);
end;

运行存储过程:

 --第一种调用方式,通过pl/sql运行
begin
  proc_findNameAndSal;
end;
--第二种方式: 在小黑屏,dos命令窗口:
dbms_output.put_line() 默认不显示, 打开显示
set serverout on;
exec 存储过程名;

有参的存储过程:例:

  存储过程的参数 model
  in 输入参数: 这个参数只能由调用者传递过程, 这个参数不能再存储过程内部修改 ,默认model 就是in

--查询指定员工编号的姓名薪水
create or replace procedure  proc_findNameAndSal2(eno in number) 
is
  --定义变量
  v_ename emp.ename%type;
  v_sal emp.sal%type;
begin
  --eno := 7788;  --错误的
  select ename , sal into v_ename,v_sal from emp where empno = eno;
  
  dbms_output.put_line(v_ename||v_sal);
end;

调用:

begin
  proc_findNameAndSal2(7902);
end;

 

Oracle--存储过程(重要)

上一篇:shell 脚本执行 mysql 语句


下一篇:第五章 数据库完整性