[置顶] Oracle PL/SQL中编写空操作的存储过程

原创 2015年11月18日 11:20:57
  原创文章,转载请注明作者:黄文海 来源:http://viscent.iteye.com,同步发布在:http://blog.viscenthuang.info/2012/10/oracle-plsql中编写空操作的存储过程/
  尽管我们编写存储过程(Stored Procedure)是希望其完成一些特定的功能。但是在某些情况下,现有的存储功能所实现的功能可能已经不再需要或者我们打算采用其它方式来实现,此时为了实现对现有系统的最小改动量(以尽可能的减少对现有系统的影响),我们不能删除这个存储过程,但需要修改这个存储过程使其做空操作,即不实现任何实质性功能。
   但是,Oracle在编译存储过程时,对存储过程体的代码有所要求:1、存储过程所声明的所有参数,在存储过程体中必须使用到;2、存储过程体中所有声明或者计算出的变量值必须在本过程中要被使用到。因此,要实现存储过程的空操作,我们无法通过注释掉原有存储过程体中的所有代码来实现,因为注释后的代码根本无法通过编译。也就是说,我们需要一些特殊处理以实现存储过程实现空操作:将存储过程体的代码写为一个if语句,而该语句的条件永远无法成立,并且这个语句又使用到了存储过程定义的所有变量。这样便可以使存储过程编译通过,而在其具体运行时,又不实现任何实质功能。

   比如,下面的存储过程中,假设timeStamp表示的是系统当前时间距离1970年1月1日的秒数(因此,该值永远只会是正数,不会是负数)。
create or replace procedure ADisabledSP(timeStamp number,
tableName varchar2) is
begin
if timeStamp<0 then --该条件永远无法成立,且使用了输入参数timeStamp
dbms_output.put_line('We are going to operate on table ' || tableName); --使用了输入参数tableName
end if;
end;


  上面的代码,通过在if语句中指定“timeStamp<0”这一无法成立的条件,使得整个if语句体内的代码永远无法被执行,从而达到空操作的目的。并且,if语句中的条件子句以及语句体中使用了本存储过程定义的所有变量,保证了编译能够通过。

相关文章推荐

PL/SQL 存储过程入门小例子

1.为什么要有存储过程? 过程是指用于执行特定操作的PL/SQL块。如果客户应用经常需要执行特定操作,那么可以考虑基于这些操作建立过程。(类似C函数,Java方法) 2.oracle的存储过程里的传递...
  • dazengq
  • dazengq
  • 2015年06月12日 13:50
  • 2548

ORACLE PL/SQL编程存储过程与函数

本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1 创建过程 6.3.2 调用存储过程 6.3.3 AUTHID 6.3.4 PRAGMA AUTONOMO...

Oracle数据库操作大全(十三)——pl/sql编程(存储过程、函数、触发器)

1.存储过程、函数、触发器局

oracle(pl/sql)包、存储过程的增、删、查、改等操作的实现(源代码)

--创建存储过程 create or replace package pkg_rights is        -- Author : Keleesy        -- Created : 2...

Oracle数据库操作大全(十四)pl/sql编程之存储过程

存储过程:

PL/SQL中编写Oracle数据库分页的存储过程

其实 Oracle数据库的分页还是比较容易理解的。此文以Oracle数据库中的SCOTT用户的EMP表为例,用PL/SQL Developer编写一个分页存储过程,要求是:可以输入表名,每页显示记录数...

Oracle存储过程单步调试方法(使用pl/sql developer工具)

您的位置: 比特网 > 软件与服务 > 数据库/开发 > 正文 Oracle存储过程单步调试方法   oracle存储过程单步调试的方法   1.在...
  • haiross
  • haiross
  • 2014年06月25日 13:42
  • 23202
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[置顶] Oracle PL/SQL中编写空操作的存储过程
举报原因:
原因补充:

(最多只允许输入30个字)