oracle之存储过程

创建

create or replace procedure procedure_name(
v1 varchar2,
v2 in varchar2,
v3 out number) 
as 
v4 number;
v_Sql long;
begin
v4:=201801;
v_slq:='
select * from dual where month_id='''||v4||'''
';
execute immediate v_sql;
dbms_output.put_line('v4:'||v4);
end;

结构

1.create or replace procedure procedure_name:

创建存储过程,replace为替换原过程。如果创建新过程,而该过程已经存在,不加replace会报错

2.参数列表定义

参数名和参数类型。参数名不能重复,参数类型不需要长度,参数传递方式:IN, OUT, IN OUT 

IN 表示输入参数,按值传递方式。 

OUT 表示输出参数,可以理解为按引用传递方式。可以作为存储过程的输出结果,供外部调用者使用。 

IN OUT 即可作输入参数,也可作输出参数。 

3.内部变量

as后课定义内部变量,这里声明的变量必须指定宽度。遵循PL/SQL的变量声明规范。

4.过程语句块

从begin开始为过程语句块,这里执行整个过程的逻辑运算。

5.异常处理块

关键字为exception ,为处理语句产生的异常。该部分为可选

6.结束块

由end关键字结果。 

过程语句块

这里是所有具体逻辑实现的部分

1.变量赋值

:=

判断语句

if 比较式 then 语句1;

else 语句2;

end if;

3.sql语句的执行

execute immediate v_sql

这里v_sql可以直接写成sql语句,也可以定义一个long格式变量,然后赋值sql语句。

其中v_sql中调用变量要写成‘||varchar||’格式,如果是一个字符串调用,则为'''||varchar||’''(三个引号,第二个为转义符)。

4.输出

dbms_output.put_line

执行

方法一

begin

procedure_name();

end; 

方法二

execute procedure_name();

游标

通常在过程里或者调用过程时都会涉及到循环,这时就会用到游标。

定义游标

cursor c_postype is select pos_type,description from pos_type_tb1 where rownum < 6;

打开游标
open c_postype

启用游标
fetch c_postype into a;

关闭游标
close c_postype

循环方法1

loop
  fetch c_postype into v_postype,v_description;
  exit when c_postype%notfound;
  ...
end loop;

循环方法2

fetch c_postype into v_postype,v_description;
while c_postype%found loop
...
   fetch c_postype into v_postype,v_description;
end loo;

循环方法3

for v_pos in c_postype loop
  v_postype := v_pos.pos_type;
  v_description := v_pos.description;
  ...
end loop;

从上面三种循环可以看出,for循环是比较简单实用的方法。 

首先,它会自动open和close游标。解决了你忘记打开或关闭游标的烦恼。 

其次,自动定义了一个记录类型及声明该类型的变量,并自动fetch数据到这个变量中。 

我们需要注意v_pos 这个变量无需要在循环外进行声明,无需要为其指定数据类型。 它具体的结构是由游标决定的。

 

转载于:https://www.cnblogs.com/dangjf/p/10077175.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值