Oracle 存储过程包(Package、Package Body)
2014-07-09 18:14
393 查看
初出茅庐,不知原来存储过程还可以写得如此复杂,而且还竟然可以调试!
好吧,得整理一下存储过程的一些语法,以备以后用到时可以查阅。
使用数据库:Oracle
数据库工具:PL/SQL Developer
在Oracle中使用存储过程可以声明单个存储过程,也可以使用包的方式一个存储过程包(PACKAGE)包含许多存储过程。
编写单个存储过程的格式可以参考下面这个例子,这是最简单的存储过程例子:
如果有许多存储过程,那么你可能需要用到存储过程包。在Oracle中使用存储过程包首先要先创建package声明存储过程,之后创建package body写存储过程的具体内容。
存储过程的package相当于Java中的接口,而package body就相当于Java中实现该接口的类。
1.声明存储过程
①在oracle的存储过程中,形式参数(形参)声明用IN关键字。上面代码[p_food IN VARCHAR2] 中,p_food为变量名,IN为关键字,VARCAHR2为变量类型。
②在存储过程中声明参数,则是直接变量名后跟上变量类型,如下面代码中的name参数:[name VARCAHR2(12)]。
2.编写存储过程内容
在方法体里要给一个变量赋值,应该使用符号 " := ",如:" name := 'Hello Oracle!' "。
这里用到的语法是PLSQL语法,想了解更多关于PLSQL语法的知识,可以看我的另一篇文章:PL/SQL基础语法
好吧,得整理一下存储过程的一些语法,以备以后用到时可以查阅。
使用数据库:Oracle
数据库工具:PL/SQL Developer
在Oracle中使用存储过程可以声明单个存储过程,也可以使用包的方式一个存储过程包(PACKAGE)包含许多存储过程。
编写单个存储过程的格式可以参考下面这个例子,这是最简单的存储过程例子:
CREATE OR REPLACE PROCEDURE PROC_TEST IS /* 声明变量 */ count number; BEGIN /* SQL代码 */ select * from dual; /* 异常处理 */ EXCEPTIOIN WHEN NO_DATA_FOUND THEN --处理代码 WHEN OTHERS THEN --处理代码 END PROC_TEST; --这里也可以直接写成: "END;"
如果有许多存储过程,那么你可能需要用到存储过程包。在Oracle中使用存储过程包首先要先创建package声明存储过程,之后创建package body写存储过程的具体内容。
存储过程的package相当于Java中的接口,而package body就相当于Java中实现该接口的类。
1.声明存储过程
CREATE OR REPLACE PACKAGE PACK_ZOO IS /* 不带参数的存储过程 */ PROCEDURE WATCH_MONKEY; /* 带参数的存储过程 */ PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER); END PACK_ZOO;
①在oracle的存储过程中,形式参数(形参)声明用IN关键字。上面代码[p_food IN VARCHAR2] 中,p_food为变量名,IN为关键字,VARCAHR2为变量类型。
②在存储过程中声明参数,则是直接变量名后跟上变量类型,如下面代码中的name参数:[name VARCAHR2(12)]。
2.编写存储过程内容
CREATE OR REPLACE PACKAGE BODY PACK_ZOO IS /* * 不带参数的存储过程 */ PROCEDURE WATCH_MONKEY IS /* 参数声明 */ name VARCHAR2(12); BEGIN /* 处理体 */ SELECT * FROM DUAL; /* 异常处理 */ EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('无数据记录'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode); --sqlcode代表异常代码 DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm); --sqlerrm代表异常信息 END WATCH_MONKEY; /* *带参数的存储过程 */ PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER) IS /* 参数声明 */ name VARCHAR2(12); BEGIN /* 处理体 */ name := 'Hello Oracle!'; /* 异常处理 */ EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.put_line('CATCH EXCEPTIOIN'); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode); --sqlcode代表异常代码 DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm); --sqlerrm代表异常信息 END FEED_MONKEY; END PACK_ZOO;
在方法体里要给一个变量赋值,应该使用符号 " := ",如:" name := 'Hello Oracle!' "。
这里用到的语法是PLSQL语法,想了解更多关于PLSQL语法的知识,可以看我的另一篇文章:PL/SQL基础语法
相关文章推荐
- oracle 创建package 以及对其中的存储过程的调用
- Oracle分页存储过程及Package学习(转载)
- 存储过程调用package 、package body中的方法
- 【Oracle】-通过package来构建存储过程
- C#调用Oracle的存储过程,其参数为数组类型”中的­Package
- 通过JDBC创建Oracle的存储过程
- Oracle 存储过程返回结果集
- 一个简单的oracle分页存储过程的实现和调用
- 一个简单的oracle分页存储过程的实现和调用
- 如何加密Oracle中的存储过程
- 关于asp调用oracle存储过程的问题
- Spring 调用ORACLE存储过程的结果集
- jsp中调用Bean,然后在Bean中调用oracle存储过程。
- 调用oracle存储过程一定要加参数 的位数。。。
- oracle的存储过程如何返回结果集
- Oracle的存储过程怎么写呀?
- 用.NET调用oracle的存储过程返回记录集
- 在ORACLE的存储过程中如何做简单的动态查询
- 如何在Delphi中调用oracle的存储过程返回数据集
- C#+Oracle开发中执行存储过程问题