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之存储过程的主要内容,如果未能解决你的问题,请参考以下文章