oracle存储过程的结构包含三部分:1、过程声明;2、执行过程部分;3、存储过程异常,该部分可省略,如果要增强脚本的容错性和调试的方便性那就写上异常处理。
本教程操作环境:windows7系统、oracle 11g版、dell g3电脑。
什么是存储过程
存储过程: 百度百科上是这样解释的,存储过程(stored procedure)是在大型数据库系统中,一组为了完成特定功能的sql 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。
简单的说就是专门干一件事一段sql语句。
可以由数据库自己去调用,也可以由java程序去调用。
在oracle数据库中存储过程是procedure。
存储过程结构
(1)基本结构
oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常(可写可不写,要增强脚本的容错性和调试的方便性那就写上异常处理)
(2)无参存储过程
/**name_procedure就是自己自定义的存储过程名*/create or replace procedure name_procedure as/is 变量名1 数据类型; 变量名2 数据类型;begin --要处理的业务逻辑 exception --存储过程异常end name_procedure;
(3).有参存储过程
普通参数存储过程
/*age 类型为number 初始化为20;*/create or replace procedure name_procedure (param1 type)as/isname varchar(20);age number :=20;begin --业务处理.....end ;
带参数的存储过程并且进行赋值
create or replace procedure 存储过程名称( s_no in varchar, s_name out varchar, s_age number) astotal number := 0;begin select count(1) into total from student s where s.age=s_age; dbms_output.put_line('符合该年龄的学生有'||total||'人'); exception when too_many_rows then dbms_output.put_line('返回值多于1行'); end
其中参数in表示输入参数,是参数的默认模式。
out表示返回值参数,类型可以使用任意oracle中的合法类型。
out模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
in out表示该参数可以向该过程中传递值,也可以将某个值传出去
第7行:查询语句,把参数s_age作为过滤条件,into关键字,把查到的结果赋给total变量。
第8行:输出查询结果,在数据库中“||”用来连接字符串
第9—11行:做异常处理
存储过程语法
(1)运算符
(2)select into statement语句
将查询结果赋值给一个变量或多个变量
需求:查出成绩为100分的那个学生的姓名,年龄,籍贯
create or replace procedure demo_cdd1 iss_name varchar2; --学生名称s_age number; --学生年龄s_address varchar2; --学生籍贯begin --给单个变量赋值 select student_address into s_address from student where student_grade=100; --给多个变量赋值 select student_name,student_age into s_name,s_age from student where student_grade=100; --输出成绩为100分的那个学生信息 dbms_output.put_line('姓名:'||s_name||',年龄:'||s_age||',籍贯:'||s_address);end
(3)选择语句
//if 后面一定要添加then 相当于java中的 大括号if s_sex=1 then dbms_output.put_line('这个学生是男生');else if then dbms_output.put_line('这个学生是女生');else dbms_output.put_line('这个学生性别错误');end if
(4)循环语句
a.基本循环
loop if 表达式 then exit; end ifend loop;
b.while循环
while 表达式 loop dbms_output.put_line('haha');end loop;
c.for循环
//a 1 到 20 范围for a in 10 .. 20 loop dbms_output.put_line('value of a: ' || a);end loop;
推荐教程:《oracle教程》
以上就是oracle存储过程的基本结构包含哪些的详细内容。