oracle 存储过程小总结
1 创造存储过程
Create or procedure My_procedure( param1,param2) is
Begin
.
.
.
End
2 判断语句
If x>0 then
Begin
.
.
.
End
End if
3 for 循环
For …in… Loop
.
.
.
End Loop
4 循环遍历游标
Create or replace procedure My_procedure() as Cursor cursor is select name from student;name Varchar(20);
Begin
For name in cursor LOOP
Begin
.
.
.
End
End Loop
End
5 循环遍历数组
Create or replace procedure My_procedure(varArray in My_Package.TestArray) as
I number
Begin
For I in varArray.count Loop
Begin
.
.
.
End
End Loop
End
6 while 循环
While(条件语句) Loop
Begin
.
.
.
End
End Loop
Eg:
Create or replace procedure My_procedure() as
I number
Begin
While(i<10) Loop
Begin
I:=i+1;
End;
End Loop
End
7 oracle 数组的使用
(1) 使用oracle 自带的数组类型
X array //使用的时候进行初始化
Eg:
Create or replace procedure My_procedure(y out array) as
X array;
Begin
X:=new array();
y:=x;
end
(2) 使用自定义的数组类型(自定义数组类型的时候,建议通过创建Package的方式实现,以便于管理)
Eg:
Create or replace package My_package is
Public type declarations type info is record( name varchar(20), y number);
Type TestArray is table of info index by binary_integer;
//如果不指定index by binary_integer 就要 varArray My_package.TestArray;
varArray:=new My_package.TestArray();
8 oracle 游标的使用
游标的使用是非常有用的额,用于遍历临时表中的查询结果。其相关的方法和属性也是很多
(1)
Create or replace procedure My_procedure () is cursor_1 Cursor is select stu_name form student ;varName varchar(20);
Cursor_2 cursor;
Begin
Select stu_name into cursor_2 from student;
For varName in cursor_2 Loop
Begin
.
.
.
End
End Loop
End
(3) Sys_refcursor 型游标,该游标是Oracle以预定义的游标,可以作传出参数进行传递
Create or replace procedure My_procedure(rsCursor out Sys_refcursor) is
Cursor_1 Sys_refcursor;
Name varchar(20);
Begin
Open cursor_1 for select stu_name from student //sys_refcursor 只能通过open 方法打开和赋值
Loop
Fetch cursor_1 into name //sys_refcursor 只能通过fetch into 来打开和遍历
Exit when
Cursor_1%notfound //notfound 未找到记录信息 found找到记录信息 rowcount 当前游标所指向的行的位置
.
.
.
End Loop
rsCursor:=cursor_1
End
友情提示
' 单引号
Eg:
实例
下面写一个简单的例子来对oracle 语句的用法做一个简单的应用
现假设有两张表
一张是学生成绩表(student)
字段为:
stu_id ,math, article, language,music, sport, total,average,step
另一张是学生的课外成绩表(out_school),字段为
Stu_id ,practice,comment
现通过存储过程自动计算出每位学生的总成绩和平均成绩,同时,如果学生在课外课程中获得的评分为“A” ,就在总成绩上面加20分
Create or replace procedure auto_Compute(step in number) as
rsCursor Sys_refcursor;
comentArray myPackage.myArray;
math number;
article number;
language number;
music number;
sport number;
total number;
average number;
stu_id varchar(30);
record myPackage.stdInfo;
I number;
Begin
I;=1;
Get_comment(commentArray);
Open rsCursor for select stu_id ,math, article,language, music,sport from student t where t.step=step;
Loop
Fetch rsCursor into stu_id,math,article,language,music,sport ;//解析rscursor
Exit when rsCursor%notfound;
Total:=math+article+language+music+sport;
For I in commentArray.count Loop
Record:=commentArray(i);
If(stu_id=record.stu.id) then
Begin
If record.comment=’A’ then
Begin
Total:=total+20;
End;
End if
End
Endif
End Loop
Average:total/5;
Update student t set t.total=total and t.average=average where t.stu_id=stu_id;
End Loop;
End;
获得学生的评论信息放入commentArray 数组
Create or replace procedure get_comment(commentArray out myPackage.myArray) as
rsCursor Sys_refCursor;
record myPackage.stdInfo;
std_id varchar(30)
comment varchar(1);
I number;
Begin
Open rscursor for select std_id ,comment from out_school
I:=1;//定义索引
Loop
Fetch rscursor into std_id,comment;
Exit when rscursor%notfound
Record.stu_id=stu_id;
Record.comment=comment;
commentArray(i)=record;
i:=i+1;
end Loop
end;
定义数组类型myArray和评论信息类型stdInfo
Create or replace package myPackage as
Begin
Type stdInfo is record(stu_id varchar(30),comment varchar(1)));
Type myArray is table of stdInfo index by binary_integer;
End ;
oracle 存储过程小总结的更多相关文章
- 写的一个ORACLE存储过程小练习
CREATE OR REPLACE PROCEDURE PRO_1112(O_NOTE OUT NUMBER,O_RESULT OUT VARCHAR2)ASV_NO NUMBER(20);V_NOT ...
- ORACLE存储过程调用Web Service
1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...
- oracle存储过程实例
oracle存储过程实例 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的P ...
- 如何在pl/sql developer 7运行到oracle存储过程设置断点的地方
如何高效调试oracle存储过程,尤其是父子网状调用的存储过程 1,在需要设置断点的oracle存储过程处设置断点 如何设置断点:直接在某行oracle存储过程处单击行首,会在行首显示 ...
- oracle存储过程的例子
oracle存储过程的例子 分类: 数据(仓)库及处理 2010-05-03 17:15 1055人阅读 评论(2)收藏 举报 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的 ...
- [oracle] Oracle存储过程里操作BLOB的字节数据的办法,例如写入32位整数
作者: zyl910 一.缘由 BLOB是指二进制大对象,也就是英文Binary Large Object的缩写. 在很多时候,我们是通过其他编程语言(如Java)访问BLOB的字节数据,进行字节级的 ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
- Oracle存储过程(增、删、改)写法、oracle执行存储过程
Oracle存储过程(增.删.改)写法 发布时间: 2010-3-24 11:07 作者: ZHF 来源: 51Testing软件测试网采编 字体: 小 中 大 | 上一篇 下一篇 ...
- ORACLE存储过程,循环语法和游标
1.定义所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.在使用时候,用户通过指定已经定义的存储过程名字并给出 ...
随机推荐
- Scala相关
vim conf for scala: http://stackoverflow.com/questions/3626203/text-editor-for-scala http://fengshen ...
- angular的$scope
angularJS是一个MVVM的前端js框架. $scope的作用是angular向视图(html)传递数据的通道,它不负责处理和操作数据.也就是说要想向视图传递数据的话,必须定义$scope变量. ...
- ExecutorService线程池应用
//线程数量 int threadNum = lists.size(); //创建一个线程池 ExecutorService pool = Executors.newFixedThreadPool(t ...
- 【转】T-SQL查询进阶—理解SQL Server中的锁
简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查 ...
- 俄罗斯画师Mikhail Rakhmatullin作品
- Install Nvidia driver 367.18 or later
Install Nvidia driver 367.18 or later from ppa:graphics-drivers/ppa as follows: sudo add-apt-reposit ...
- 【转载】动态新增svg节点
原文地址:http://blog.csdn.net/tomatomas/article/details/50442497 原文作者:番茄大圣 创建svg节点时,要使用createElementNS函数 ...
- angularjs的$on、$emit、$broadcast
如何在作用域之间通信呢? 1.创建一个单例服务,然后通过这个服务处理所有子作用域的通信. 2.通过作用域中的事件处理通信.但是这种方法有一些限制:例如,你并不能广泛的将事件传播到所有监控的作用域中.你 ...
- Linux 系统时间和硬件时间
linux 的系统时间有时跟硬件时间是不同步的 Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel ...
- 关闭dialog(lhgdialog)
W.$.dialog({id:'dyj'}).close(); 成功 $("#id").dialog('close');frameElement.api.close();