oracle的存贮过程

语法

定义:CREATE [OR REPLACE] PROCEDURE <过程名>[(参数列表)] IS
[局部变量声明]
BEGIN
可执行语句
EXCEPTION
异常处理语句
END [<过程名>];

变量的类型:in 为默认类型,表示输入; out 表示只输出;in out 表示即输入又输出;

例如:

create or replace procedure cursor_test(v1 varchar2,v2 in out int) is
-- 为v_rid的类型和表room的rid字段类型一致
v_rid room.rid%type;
v_name room.rname%type;
-- v_room 的类型和room表的行类型一致
v_room room%rowtype;
cursor room_cursor is
select rid,rname from room;
begin
loop
      if not room_cursor%isopen then
        open room_cursor;
      end if;
      
      fetch room_cursor into v_rid,v_name;
      
      exit when room_cursor%notfound;
      
      dbms_output.put_line(v_name);
end loop;
end;

declare
    n int;
begin
  n:=1;    
cursor_test('test',n);
end;

oracle游标使用

oracle游标分为显式游标和隐式游标,显式游标需要显示的定义:

 CURSOR <游标名> IS <SELECT 语句> [FOR UPDATE | FOR UPDATE OF 字段];

[FOR UPDATE | FOR UPDATE OF 字段] --给游标加锁,当程序执行DML语句时,游标自动给指定的表或者字段加锁,防止同时有别的程序对指定的表或字段进行"UPDATE",“INSERT”,“DELETE"操作.
在使用"DELETE”,"UPDATE"后还可以在程序中使用CURRENT OF <游标名> 子句引用当前行.
1.打开游标
OPEN <游标名>
2.获取游标当前位置的值

FETCH <游标名> INTO 变量1,变量2,…变量n,;
或者 FETCH <游标名> INTO 行对象; --取出游标当前

位置的值
3.关闭游标

CLOSE <游标名>

游标属性

%NOTFOUND --如果FETCH语句失败,则该属性为"TRUE",否则为"FALSE";
%FOUND --如果FETCH语句成果,则该属性为"TRUE",否则为"FALSE";
%ROWCOUNT --返回游标当前行的行数;
%ISOPEN --如果游标是开的则返回"TRUE",否则为"FALSE";

游标一般配合循环来进行使用

调用存贮过程

1.使用begin和end块

declare
    n int;
begin
  n:=1;    
cursor_test('test',n);
end;

2.call p();
3.exec p();

其他语法

1. 使用全局变量

使用:号修饰
:i=100;

2.用户交互输入

使用&

declare
    n int;
begin
  n:=&n;    
end;

3.for循环

3.FOR
FOR <循环变量> IN 下限..上限
LOOP
   语句;
END LOOP;

用for循环处理游标

create or replace procedure cursor_test(v1 varchar2,v2 in out int) is
v_rid room.rid%type;
v_name room.rname%type;

cursor room_cursor is
select rid,rname from room;
begin
  
      for v_room in room_cursor loop
          dbms_output.put_line(v_room.rname);
      end loop;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值