Oracle 存储过程语法及使用

写在前面

本来这种东西作为一个写Java的我以为应该是基本用不上的,以前基本就是听过而已的一个概念,但是实际接到的一个需求就是需要数据库去定期执行存储过程,本着打好基础的目的,还是稍微学习了一下,本篇并不学术、系统、严谨,就是随笔写个使用经验防遗忘。

Oracle存储过程的基本语法

create [or replace] procedure 过程名
( p1 in|out datatype,
  p2 in|out datatype,
  ...
  pn in|out datatype
     
) is 
     
    变量1 类型(值范围);
	变量2 类型(值范围);....--声明部分
 
    begin
     
    ....--过程体
 
    end;

敝司将不同模块需要用到的存储过程放到对应的package中,因此,可以粗暴地将package理解为一个class,而procedure就是类对应的function,这样并不十分严谨,Oracle有它自己的Function,并且可以与procedure一起置于package下。
其中in表示入参,out就是出参或者说运行结果了。
在上面的“声明部分”,可以声明我们需要用到的变量及其类型和范围,变量可以是调用其他存储过程来赋值。
过程体就是具体的方法体实现,入参以及声明体中的变量可以在这个部分使用。

关于游标Cursor

Cursor可以用来作为一个中间TEMP值使用,依然可以在上述声明部分使用。例如这样一个场景,我们需要先行查询一个结果集,并对其中元素遍历,那么CURSOR结合LOOP体就十分有用,事实上敝司的CURSOR也是这么用的。
其语法如下:

-- 声明游标
declare cursor cursor_name(游标名)
is select_statement(查询语句);

--使用游标
open cursor_name;
--关闭游标 请注意使用完后一定要关闭
close cursor_name;
--从游标中获取数据
fetch cursor_name into v_record--变量

遍历CURSOR中数据的实例

open cur_xsjbxx;--打开游标
  loop
    FETCH cur_name
      INTO ls_curinfo;--获取记录值
    EXIT WHEN cur_name%NOTFOUND;
   
    dbms_output.put_line('游标信息ID:' || ls_curinfo.id || ',名称:' ||
                         ls_curinfo.name);
  end loop;
  close cur_xsjbxx;--关闭游标

你可能感兴趣的:(数据库)