ORACLE:存储过程详解
一、定义
存储过程,就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
二、存储过程创建
Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。
2.1无参存储过程语法
2.2带参存储过程实例
2.3带参数存储过程含赋值方式
其中参数 IN 表示输入参数,是参数的默认模式。
OUT 表示返回值参数,类型可以使用任意Oracle中的合法类型。OUT模式定义的参数只能在过程体内部赋值,表示该参数可以将某个值传递回调用他的过程
IN OUT 表示该参数可以向该过程中传递值,也可以将某个值传出去。
2.4存储过程中游标定义使用
2.5游标的定义
三、调用存储过程
3.1过程调用方式一
3.2过程调用方式二
3.3过程调用方式三(SQL命令行方式下)
无返回值过程调用
有返回值过程调用
或
四、存储过程创建语法
五、注意事项
1.存储过程参数不带取值范围,IN 表示传入,OUT 表示输出;
2.变量带取值范围,后面接分号;
3.在判断语句前最好先用count(*)函数判断是否存在该条操作记录;
4.用select … into … 给变量赋值
5.在代码中抛异常用 raise + 异常名
5.1已命名的异常
ACCESS_INTO_NULL 未定义对象CASE_NOT_FOUND CASE 中若未包含相应的 WHEN ,并且没有设置ELSE 时COLLECTION_IS_NULL 集合元素未初始化CURSER_ALREADY_OPEN 游标已经打开DUP_VAL_ON_INDEX 唯一索引对应的列上有重复的值INVALID_CURSOR 在不合法的游标上进行操作INVALID_NUMBER 内嵌的 SQL 语句不能将字符转换为数字NO_DATA_FOUND 使用 select into 未返回行,或应用索引表未初始化的TOO_MANY_ROWS 执行 select into 时,结果集超过一行ZERO_DIVIDE 除数为 0SUBSCRIPT_BEYOND_COUNT 元素下标超过嵌套表或 VARRAY 的最大值SUBSCRIPT_OUTSIDE_LIMIT 使用嵌套表或 VARRAY 时,将下标指定为负数VALUE_ERROR 赋值时,变量长度不足以容纳实际数据LOGIN_DENIED PL/SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码NOT_LOGGED_ON PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据PROGRAM_ERROR PL/SQL 内部问题,可能需要重装数据字典& plhttps://zhuanlan.zhihu.com/p/SQL系统包ROWTYPE_MISMATCH 宿主游标变量与 PL/SQL 游标变量的返回类型不兼容SELF_IS_NULL 使用对象类型时,在 null 对象上调用对象方法STORAGE_ERROR 运行 PL/SQL 时,超出内存空间SYS_INVALID_ID 无效的 ROWID 字符串TIMEOUT_ON_RESOURCE Oracle 在等待资源时超时
六、基本语法
6.1基本结构
6.2 Select into 语句
6.3 IF判断
6.4 while循环
6.5变量赋值
6.6 用for in 使用cursor
6.7带参数的cursor
6.8用PL/SQL 或 developer的debug
连接数据库后建立一个Test Window,在窗口调用SP的代码,F9开始debug,ctrl+N单步调试。
七、关于Oracle存储过程的若干问题备忘
1.在oracle中,数据表别名不能加as,如:
2.在存储过程中,select某一字段时,后面必须紧跟into,如果select某个记录,利用游标的话就另当别论了。
3.在利用select … into … 语法时,必须先确保数据库中有该条记录,否则会报出"no data found"异常。
可以在该语法之前,先利用select count(*) from 查看数据库中是否存在该记录,如果存在,再利用select … into …
4.在存储过程中,别名不能和字段名称相同,否则虽然编译可以通过,但在运行阶段会报错
5.在存储过程中,关于出现Null 的问题
假设有一个表A,定义如下:
如果在存储过程中,使用如下语句:
如果A表中不存在bid=”xxxxxx”的记录,则fcount=null(即使fcount定义时设置了默认值,如:fcount number(8):=0依然无效,fcount还是会变成null),这样以后使用fcount时就可能有问题,所以在这里最好先判断一下:
6.Hibernate 调用oracle存储过程
ORACLE进阶(七)存储过程详解_No Silver Bullet的博客-CSDN博客_oracle存储过程实例详解
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/93563.html