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

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

使用数据库:Oracle

数据库工具:PL/SQL Developer

在Oracle中使用存储过程可以声明单个存储过程,也可以使用包的方式一个存储过程包(PACKAGE)包含许多存储过程。

编写单个存储过程的格式可以参考下面这个例子,这是最简单的存储过程例子:

  1. CREATE OR REPLACE PROCEDURE PROC_TEST IS
  2. /* 声明变量 */
  3. count number;
  4. BEGIN
  5. /* SQL代码 */
  6. select * from dual;
  7. /* 异常处理 */
  8. EXCEPTIOIN
  9. WHEN NO_DATA_FOUND THEN
  10. --处理代码
  11. WHEN OTHERS THEN
  12. --处理代码
  13. END PROC_TEST; --这里也可以直接写成: "END;"

如果有许多存储过程,那么你可能需要用到存储过程包。在Oracle中使用存储过程包首先要先创建package声明存储过程,之后创建package body写存储过程的具体内容。

存储过程的package相当于Java中的接口,而package body就相当于Java中实现该接口的类。

1.声明存储过程

  1. CREATE OR REPLACE PACKAGE PACK_ZOO IS
  2. /* 不带参数的存储过程 */
  3. PROCEDURE WATCH_MONKEY;
  4. /* 带参数的存储过程 */
  5. PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER);
  6. END PACK_ZOO;

①在oracle的存储过程中,形式参数(形参)声明用IN关键字。上面代码[p_food IN VARCHAR2] 中,p_food为变量名,IN为关键字,VARCAHR2为变量类型。

②在存储过程中声明参数,则是直接变量名后跟上变量类型,如下面代码中的name参数:[name VARCAHR2(12)]

2.编写存储过程内容

  1. CREATE OR REPLACE PACKAGE BODY PACK_ZOO IS
  2. /*
  3. * 不带参数的存储过程
  4. */
  5. PROCEDURE WATCH_MONKEY IS
  6. /* 参数声明 */
  7. name VARCHAR2(12);
  8. BEGIN
  9. /* 处理体 */
  10. SELECT * FROM DUAL;
  11. /* 异常处理 */
  12. EXCEPTION
  13. WHEN NO_DATA_FOUND THEN
  14. DBMS_OUTPUT.PUT_LINE('无数据记录');
  15. WHEN OTHERS THEN
  16. DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode); --sqlcode代表异常代码
  17. DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm); --sqlerrm代表异常信息
  18.    END WATCH_MONKEY;
  19. /*
  20. *带参数的存储过程
  21. */
  22. PROCEDURE FEED_MONKEY(p_food IN VARCHAR2, p_amount IN NUMBER) IS
  23. /* 参数声明 */
  24. name VARCHAR2(12);
  25. BEGIN
  26. /* 处理体 */
  27. name := 'Hello Oracle!';
  28. /* 异常处理 */
  29. EXCEPTION
  30. WHEN NO_DATA_FOUND THEN
  31. DBMS_OUTPUT.put_line('CATCH EXCEPTIOIN');
  32. WHEN OTHERS THEN
  33. DBMS_OUTPUT.PUT_LINE('异常代码:' + sqlcode); --sqlcode代表异常代码
  34. DBMS_OUTPUT.PUT_LINE('异常信息:' + sqlerrm); --sqlerrm代表异常信息
  35. END FEED_MONKEY;
  36. 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. Generating a new SSH key

    Open Git Bash. Paste the text below, substituting in your GitHub email address. $ ssh-keygen -t rsa ...

  2. MyEclipse构建maven项目报错

    直接上图: 这里有三种方案: 1.检查jdk版本:最好换成1.8版本 项目右键-->build path-->configure build Path; 1.2  点击 libraries ...

  3. Mybatis技术内幕(一)——整体架构概览

    Mybatis技术内幕(一)--整体架构概览 Mybatis的整体架构分为三层,分别是基础支持层.核心处理层和接口层. 如图所示: 一.基础支持层 基础支持层包含整个Mybatis的基础模块,这些模块 ...

  4. shell 命令 tar -zxvf 解压 tar -zcvf 压缩

    tar -zxvf 解压 tar -zcvf 压缩

  5. C++ const使用总结

    这里针对C++中const的一些一般用法进行一下简单的总结 一.定义常量 常量不可修改 : ; 与#define宏定义常量的区别:(1)const常量具有类型,编译器可以进行安全检查:#define宏 ...

  6. c# winform 窗体失去焦点关闭(钩子实现)

    先来一个辅助类 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Inte ...

  7. Spring Boot 中如何支持异步方法

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  8. python登陆代码简单逻辑

    孩子:妈妈,我想要一个登陆的接口 妈妈:写,现在写,写1个够吗? 孩子:够了,妈妈真好,谢谢妈妈. 需求写一个简单的登陆逻辑: 1.定义一个账号和密码 2.输入账号和密码,密码要求密文 3.输入正确提 ...

  9. python3之猜数字游戏

    猜数字小游戏 # coding:utf-8 import random #利用random生成一个1-10的随机数 luckeyNum = random.randint(1,10) #限定猜的次数 l ...

  10. Java生鲜电商平台-订单架构实战

    Java生鲜电商平台-订单架构实战 生鲜电商中订单中心是一个电商后台系统的枢纽,在这订单这一环节上需要读取多个模块的数据和信息进行加工处理,并流向下一环节:因此订单模块对一电商系统来说,重要性不言而喻 ...