动态调用存储过程代码实例.doc_第1页
动态调用存储过程代码实例.doc_第2页
动态调用存储过程代码实例.doc_第3页
动态调用存储过程代码实例.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

这几天公司数据转换中用到了动态调用存储过程,自己做了一个最简单的练习,现看一下代码例子:代码大概描述:将要调用的包中的存储过程名全部存放在一张表中,循环取出,拼接成动态调用存储过程的调用语句,四个过程分别实现两个数的加、减、乘、除运算。定义包头:create or replace package PKG_T_CYP is - Author : ADMINISTRATOR - Created : 2012-5-22 9:22:16 - Purpose : - Public type declarations -type is ; - Public constant declarations - constant := ; -定义常量 DEF_OK CONSTANT NUMBER := 1; DEF_ERR CONSTANT NUMBER := -1; - Public variable declarations - ; -定义变量 A NUMBER := 10; B NUMBER := 11; - Public function and procedure declarations -定义存储过程,两个数相加 PROCEDURE Prc_t_plus(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2); -定义存储过程,两个数相减 PROCEDURE Prc_t_minus(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2); -定义存储过程,两个数相乘 PROCEDURE Prc_t_multiply(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2); -定义存储过程,实现两个数相除 PROCEDURE Prc_t_divide(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2); -此过程进行测试 PROCEDURE Prc_t_callpro(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2); -function ( ) return ;end PKG_T_CYP; 实现包体:create or replace package body PKG_T_CYP is - Private type declarations -type is ; - Private constant declarations - constant := ; - Private variable declarations - ; - Function and procedure implementations /* function ( ) return is ; begin ; return(); end;*/ -存储过程实现 PROCEDURE Prc_t_plus(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2) IS sumall NUMBER; BEGIN sumall := PRM_first + PRM_second; PRM_third := sumall; dbms_output.put_line(两个数的和是 : | PRM_third); PRM_APPCODE := DEF_OK; PRM_ERRORMSG := 成功!; EXCEPTION WHEN OTHERS THEN PRM_APPCODE := DEF_ERR; PRM_ERRORMSG := 失败!; RETURN; END Prc_t_plus; PROCEDURE Prc_t_minus(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2) IS mins NUMBER; BEGIN mins := PRM_first - PRM_second; PRM_third := mins; dbms_output.put_line(两个数的差是 : | PRM_third); PRM_APPCODE := DEF_OK; PRM_ERRORMSG := 求两个数的差成功!; EXCEPTION WHEN OTHERS THEN PRM_APPCODE := DEF_ERR; PRM_ERRORMSG := 求两个数的差时出错!; END Prc_t_minus; PROCEDURE Prc_t_multiply(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2) IS mul number; BEGIN mul := PRM_first * PRM_second; PRM_third := mul; Dbms_Output.put_line(两个数的积是: | PRM_third); PRM_APPCODE := DEF_OK; PRM_ERRORMSG := 求两个数的积是成功!; EXCEPTION WHEN OTHERS THEN PRM_APPCODE := DEF_ERR; PRM_ERRORMSG := 求两个数的积时出错!; END Prc_t_multiply; -调用此过程进行测试 PROCEDURE Prc_t_callpro(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2) IS -ret number; BEGIN FOR pronamecur IN (select proname from dynamicpro) LOOP -动态调用存储过程 EXECUTE IMMEDIATE begin PKG_T_CYP.PRC_T_ | name | (:1,:2,:3,:4,:5); end; -参数列表赋值 USING IN PRM_first, IN PRM_second, OUT PRM_third, OUT PRM_APPCODE, OUT PRM_ERRORMSG; END LOOP; END Prc_t_callpro; PROCEDURE Prc_t_divide(PRM_first IN VARCHAR2, PRM_second IN VARCHAR2, PRM_third OUT VARCHAR2, PRM_APPCODE OUT VARCHAR2, PRM_ERRORMSG OUT VARCHAR2) IS -定义局部变量 devide number; BEGIN devide := PRM_first / PRM_second; PRM_third := devide; PRM_APPCODE := DEF_OK; PRM_ERRORMSG := 求两个数的商成功!; -异常处理 EXCEPTION WHEN ZERO_DIVIDE THEN PRM_APPCODE := DEF_ERR; PRM_ERRORMSG := 除数不能为零!; WHEN OTHERS THEN PRM_APPCODE := DEF_ERR; PRM_ERRORMSG := 求两个数的商失败!; END Prc_t_divide; -包头中可以不定义存储过程,直接在包体中定义实现 PROCEDURE Prc_t_test is begin DBMS_OUTPUT.put_line(ddd); END Prc_t_test;begin - Initialization -; dbms_output.put_line(ddd);end PKG_T_CYP;创建表DYNAMICPRO:create table DYNAMICPRO( PRONAME VARCHAR2(100)插入数据,PRONAME字体值就是包中定义的四个过程的名字:in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论