本文是基于oracle编写的存储过程,以下所说的存储过程均为oracle中的存储过程,以及下面所说的存过都是存储过程的简称
创建存储过程的方式两种,一种是基于PLSQL创建,一种是ORACLE语法创建
PLSQL创建步骤:
ORACLE语法创建:(注意:如果没有参数请把括号去掉,否则会报错)
直接在文本中编写存过的基本框架内容
打开plsql或者oracle命令行模式直接复制执行
a、带参存储过程语法
b、无参存储过程语法
a、按照数据类型进行声明
格式:变量名 变量的数据类型;
样例:v_name varchar2(500);
b、根据表字段进行声明
格式:变量名 表名.字段名%TYPE
样例:v_name userinfo.name%TYPE;
注意:变量的数据类型和表名的字段数据类型一致
c、根据表的行记录进行声明
格式:变量名 表名/游标名%ROWTYPE
样例:v_user_row userinfo%ROWTYPE;
注意:变量的数据类型和表的行数据类型一致
如果只是调试存储过程语句可直接用下面语法,在plsql的sql框中直接执行,比如下面介绍的控制语句都可以直接使用,输出结果去输出框查看。
基本能语法:
DECLARE
变量定义
BEGIN
......
END;
游标(Cursor)的定义:
游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临
时存储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计
算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度
才会提高,否则频繁的磁盘数据交换会降低效率。
上面是游标的官方定义,我们可以把游标理解为一个用于封装多条数据的集合。因此对于集合的遍历操作,那么游标也可以使用,下面我们会讲到。
那么游标存在隐式游标和显式游标
DML操作和单行SELECT语句会使用隐式游标,它们分别是:
* 插入操作:INSERT。
* 更新操作:UPDATE。
* 删除操作:DELETE。
* 单行查询操作:SELECT ... INTO ...。
隐式游标游标属性使用样例:
1.游标的声明
a.带参数的游标声明
b.不带参数的游标声明
注意:SELECT语句是对表或视图的查询语句,甚至也可以是联合查询。可以带WHERE条件、ORDER BY或GROUP BY等子句,但不能使用INTO子句。
2.打开游标
3.提取数据
变量的定义有两种情况
1.单个变量:记录单个字段数据,变量名是用来从游标中接收数据的变量,需要事先定义。变量的个数和类型应与SELECT语句中
的字段变量的个数和类型一致。
2.行变量:记录一条数据,一次将一行数据取到记录变量中,需要使用%ROWTYPE事先定义记录变量,这种形式使用起来比较方便,不必分别定义和使用多个变量。
定义方式采用上面变量声明c:
变量名 表名|游标名%ROWTYPE;
4.关闭游标
CLOSE 游标名;
显式游标打开后,必须显式地关闭。游标一旦关闭,游标占用的资源就被释放,游标变成无效,必须重新打开才能使用。
通过游标的属性,来了解游标的执行状态和结果,进而控制游标的执行操作。
隐式游标可以使用名字SQL来访问,但要注意,通过SQL游标名总是只能访问前一个DML操作或单行SELECT操作的游标属性。
通常在刚刚执行完操作之后,立即使用SQL游标名来访问属性。
游标的属性有四种:
因为游标在运行DML语句时打开,完成后关闭,使用SQL%ISOPEN总是为false。所以隐式游标只使用SQL%FOUND,SQL%NOTFOUND,SQL%ROWCOUNT三个属性。
1.SQL%FOUND和SQL%NOTFOUND
2.SQL%ROWCOUNT
在执行任何DML语句之前,SQL%ROWCOUNT的值都是NULL, 对于SELECT INTO语句,
如果执行成功,SQL%ROWCOUNT的值为1,如果没有成功或者没有操作(如update、insert、
delete为0条),SQL%ROWCOUNT的值为0, 而对于update和delete来说表示游标所检索
数据库行的个数即更新或者删除的行数。
3.SQL%ISOPEN
SQL%ISOPEN是一个布尔值,如果游标打开,则为TRUE, 如果游标关闭,则为FALSE.对于隐式
游标而言SQL%ISOPEN总是FALSE,这是因为隐式游标在DML语句执行时打开,结束时就立即
关闭。
下面提供几个可以参考学习的用例:
for循环结合游标(cursor)样例1:
样例1输出结果:
name:zs
age:15
addr:sc
name:zs
age:18
addr:sc
for循环结合游标(cursor)样例2 :
输出结果:
name:zs
age:15
addr:sc
name:zs
age:18
addr:sc
loop循环结合游标(cursor)样例3:(这一个比较经典,可以将上面游标所讲内容都包含在内)
while循环结合游标(cursor)样例4:
样例5:(可根据传入表名参数,分批删除指定表的指定时间段的数据)
到此这篇关于Oracle存储过程新手入门教程的文章就介绍到这了,更多相关Oracle存储过程入门教程内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/73543.html