oracle之存储过程

Posted 才华充电中

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 这个变量无需要在循环外进行声明,无需要为其指定数据类型。 它具体的结构是由游标决定的。

 




以上是关于oracle之存储过程的主要内容,如果未能解决你的问题,请参考以下文章

Oracle系列:(29)存储过程和存储函数

PostgreSQL Oracle 兼容性之存储过程

Oracle之存储过程

懵懂oracle之存储过程2

懵懂oracle之存储过程

Oracle存储过程之完整篇