初出茅庐,不知原来存储过程还可以写得如此复杂,而且还竟然可以调试!

好吧,得整理一下存储过程的一些语法,以备以后用到时可以查阅。

使用数据库: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、Package Body)的更多相关文章

  1. Oracle 中包(Package)

    一.什么要使用包?        在一个大型项目中,可能有很多模块,而每个模块又有自己的过程.函数等.而这些过程.函数默认是放在一起的(如在PL/SQL中,过程默认都是放在一起 的,即Procedur ...

  2. oracle 存储过程 包 【转】

    一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? ...

  3. Oracle 存储过程包

    create or replace package body cuttoship_lots is procedure prod_run(p_w_day date) as begin delete cu ...

  4. Oracle 包(Package)

    引用这位大大的: http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包?       答:在一个大型 ...

  5. (转)Oracle 包(Package)

    本文转载自:http://www.cnblogs.com/lovemoon714/archive/2012/02/29/2373695.html 1.为什么要使用包?       答:在一个大型项目中 ...

  6. oracle 存储过程,函数和包

    创建存储过程: 语法:create [or replace] PROCEDURE 过程名(参数列表)  AS PLSQL子程序体: 调用 存储过程的方式 两种1.execute(exec)     - ...

  7. oracle 存储过程,存储函数,包,

    http://heisetoufa.iteye.com/blog/366957 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过 ...

  8. oracle 学习(五)pl/sql语言存储过程&包

    首先搞清楚俩概念 存储过程(procedure)&程序包(package) 存储过程:数据库对象之一,可以理解为数据库的子程序,在客户端和服务器端可以直接调用它.触发器是与表直接关联的特殊存储 ...

  9. [UML]UML系列——包图Package

    系列文章 [UML]UML系列——用例图Use Case       [UML]UML系列——用例图中的各种关系(include.extend)       [UML]UML系列——类图Class   ...

随机推荐

  1. JavaScript:ES6的新特性

    1.关键字 const:修饰常量.ES6之前只有变量的声明字段var,ES6开始引入常量关键字,被修饰的变量无法被修改. <script type="text/javascript&q ...

  2. [Ljava.lang.String是一个字符串数组的字节码表示

    打印一个字符串数组的话,会发现 String[] arr = new String[10]; // String[] arr = {"yanggb", "huangq&q ...

  3. 五分钟搞定 HTTPS 配置,二哥手把手教

    01.关于 FreeSSL.cn FreeSSL.cn 是一个免费提供 HTTPS 证书申请.HTTPS 证书管理和 HTTPS 证书到期提醒服务的网站,旨在推进 HTTPS 证书的普及与应用,简化证 ...

  4. 编译安装最新版nettle和gnutls

    编译安装最新版gnutls的时候,总是会出libnettle 3.4.1 was not found的报错信息. 即使编译安装了nettle的最新版3.5之后,依然会报该错. 原因是gnutls编译的 ...

  5. 【LOJ#2687】Vim(动态规划)

    [LOJ#2687]Vim(动态规划) 题面 LOJ 题解 发现移动的路径一定是每次往后跳到下一个某个字符的位置,然后往回走若干步,删掉路径上的所有\(e\),然后继续执行这个操作. 这里稍微介绍一下 ...

  6. Springmvc配置定时任务注解开发

    1.添加命名空间和xsd约束 xmlns:task="http://www.springframework.org/schema/task" http://www.springfr ...

  7. js获取当前日期,包括星期几

    function getCurrentDate() {       var myDate = new Date();       var year = myDate.getFullYear(); // ...

  8. SpringBoot(七) SpringBoot整合Log4j

    第一种打印debug日志方式: logging.level.com.demo.mapper: debug 第二种打印debug日志方式: 在resource文件夹下新建:logback.xml < ...

  9. .NET MVC后台获得VIEW对应的html

    一..Net Core Mvc下获得 建立一个帮助类,如下: using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Render ...

  10. jsp表单更新数据库

    和插入语句相似,表单传值,在另一个页面接收数据并连接数据库进行更新: 语句如下: <% request.setCharacterEncoding("UTF-8"); Stri ...