在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器。在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的。相对来说,数据库系统中的触发器也是一种存储过程。存储过程在数据库中运算时自动生成各种执行方式,因此,大大提高了对其运行时的执行速度。在大型数据库系统如Oracle、SQL Server中都不仅提供了用户自定义存储过程的功能,同时也提供了许多可作为工具进行调用的系统自带存储过程。
   所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
   由于J2EE体系一般建立大型的企业级应用系统,而一般都配备大型数据库系统如Oracle或者SQL Server,在本文《JAVA与Oracle存储过程》中将介绍JAVA跟Oracle存储过程之间的相互应用跟相互间的各种调用。
   一、JAVA调用Oracle存储过程
   JAVA跟Oracle之间最常用的是JAVA调用Oracle的存储过程,以下简要说明下JAVA如何对Oracle存储过程进行调用。
   Ⅰ、不带输出参数情况
      过程名称为pro1,参数个数1个,数据类型为整形数据

); 
     
     // 执行Oracle存储过程 
    c.execute(); 
    conn.close(); 
}  
}  

Ⅱ、带输出参数的情况
   过程名称为pro2,参数个数2个,数据类型为整形数据,返回值为整形类型

); 
    //注册存储过程的第二个参数  
      c.registerOutParameter(2,java.sql.Types.INTEGER);
    //执行Oracle存储过程 
    c.execute(); 
      //得到存储过程的输出参数值并打印出来
      System.out.println (c.getInt(2));   
    conn.close(); 

Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

Oracle存储过程可以有无参数存储过程和带参数存储过程。 
、无参程序过程语法

        


        二、带参存储过程实例

 三、 带参数存储过程含赋值方式

  四、在Oracle中对存储过程的调用
  过程调用方式一

过程调用方式二

至此,有关ORACLE的基本存储过程以及对Oracle存储过程的调用方式介绍完毕。

出处:http://www.cnblogs.com/chinafine/articles/1776094.html

================================================================================

刚去到新公司几天,昨天老大让我想一下,现在有50多个存储,需要通过输入的参数不同,调用不用的存储过程。

开始的时候,想都没想直接用了if-then-elsif-then-else-end if,后来被说了,太不专业了,因为有五十多个,所以整个版面看上去,相当的没有可观度且相当的不专业。

后来,经提点,把这个存储过程的名字跟参数名存到一个表中,然后根据传入的参数查找相应的存储过程再调用存储过程即可。回家做了下实验,如下:

create table p_proc
(pid       number(2),
pname          varchar2(20),
pname_class    varchar2(20));  --用于存储存储过程和参数名的表并插入四条数据,
 
insert into p_proc values(1,'A','V1');
insert into p_proc values(2,'B','V2');
insert into p_proc values(3,'C','V3'); 
insert into p_proc values(4,'D','V4');  

四个存储过程的的状况为:

CREATE OR REPLACE PROCEDURE V1(v_para varchar2)
AS
BEGIN
     DBMS_OUTPUT.put_line(v_para);
END;
 
CREATE OR REPLACE PROCEDURE V2(v_para varchar2)
AS
BEGIN
     DBMS_OUTPUT.put_line(v_para);
END;
 
CREATE OR REPLACE PROCEDURE V3(v_para varchar2)
AS
BEGIN
     DBMS_OUTPUT.put_line(v_para);
END;
 
CREATE OR REPLACE PROCEDURE V4(v_para varchar2)
AS
BEGIN
     DBMS_OUTPUT.put_line(v_para);

END;

如下调用存储过程的存储为(请忽略一些测试输出):

CREATE OR REPLACE PROCEDURE PRE1(v_para varchar2)
AS
v_pname_class varchar2(20);
v_message varchar2(30);
v_str_proc varchar2(50);
BEGIN
     SELECT pname_class into v_pname_class
     FROM P_PROC WHERE PNAME=v_para;
     BEGIN
     IF SQL%FOUND THEN
        v_message := 'aaa';
     END IF;
     EXCEPTION
              WHEN OTHERS THEN
              v_pname_class := null;
     END;
     dbms_output.put_line(v_pname_class||'abc');
     v_str_proc := 'BEGIN ' ||v_pname_class || '('''|| v_para || '''); end;';  --构造匿名块的执行存储过程
     dbms_output.put_line(v_str_proc);
     dbms_output.put_line(v_message);
     execute immediate v_str_proc;  --主要是执行存储过程
END PRE1;
 

使用一个匿名块调用

BEGIN

     PRE1('A'); --PRE1('B')/PRE1('C')/PRE1('D');
END;
 

上面主要的地方我已经加粗和红色标记了,代码很简单,我就不解释了。

好了,写完了,今天中秋,明天开始国庆,祝大家双节嗨皮~~ 

出处:oracle中通过传入的参数调用表中存存放的存储过程名

Oracle存储过程创建及调用的更多相关文章

  1. Oracle存储过程创建及调用(转)

    在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器.在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的.相对来说,数据库系统中的触发器也是一种存储 ...

  2. Oracle 存储过程创建及调用

    --------创建存储过程------- create or replace procedure TestSPas begin update table_name set CREATE_TIMEST ...

  3. Oracle存储过程中异步调用的实际操作步骤

    本文标签:Oracle存储过程 我们都知道在Oracle数据库的实际应用的过程中,我们经常把相关的业务处理逻辑,放在Oracle存储过程中,客户端以通过ADO来进行相关的调用  .而有些相关的业务逻辑 ...

  4. ORACLE存储过程创建失败,如何查看其原因

    工作中用SQL Server比较多,Oracle可以说是小白,最近想用存储过程来完成单据复制的功能,结果遇到各种问题,其实都是非常简单的问题,但是对我来说还是花了很多时间来解决,浪费这些时间非常不值得 ...

  5. 利用游标返回结果集的的例子(Oracle 存储过程)JAVA调用方法和.NET调用方法

    在sqlplus中建立如下的内容: 1.程序包 SQL> create or replace package types  2  as  3      type cursorType is re ...

  6. oracle存储过程---创建存储过程语句

    一.创建存储过程语句 语法:  CREATE OR REPLACE PROCEDURE testname( argument1 TYPE1, ....  ) AS BEGIN ...... END  ...

  7. oracle函数创建及调用

    创建函数的语法如下: CREATE [OR REPLACE] FUNCTION function_name[ (argment [ { IN | OUT | IN OUT } ] Type , arg ...

  8. oracle 存储过程创建报错 Procedure created with compilation errors

    出现这错误的话,存储过程还是会成功创建的,创建好后再逐个打开查找存储过程的问题 问题:基本上就是存储过程里面的表不存在,dblink 不存在    ,用户名.xx表  要么用户名不存在要么表不存在 创 ...

  9. oracle 存储过程创建及执行简单实例

    1. 创建 CREATE OR REPLACE PROCEDURE getAplage(eNo IN NUMBER,salary OUT NUMBER) AS BEGIN SELECT AplAge ...

随机推荐

  1. 给嵌入式linux串口添加密码的一些总结

    要添加串口登录密码就需要修改 /etc/inittab 文件的配置 但是不同的开发板情况不一样,有的是没有这个文件的,BusyBox会检查/etc/inittab文件是否存在, 如果此文件不存在, B ...

  2. pagination结合ajax

    function getContent(page,Id){ $.ajax({ type:'get', url:'www.baidu.com', dataType:'jsonp', data:{ }, ...

  3. SpringBoot Maven打包项目JAR/WAR

    安装Maven 1. 登录 http://maven.apache.org/download.cgi 2. 下载 maven 压缩包 3. 解压apache-maven-3.6.0-bin.tar.g ...

  4. nginx最常见的18道面试题

    Nginx的并发能力在同类型网页服务器中的表现,相对而言是比较好的,因此受到了很多企业的青睐,我国使用Nginx网站的知名用户包括腾讯.淘宝.百度.京东.新浪.网易等等.Nginx是网页服务器运维人员 ...

  5. mongodb的使用(入门)

    1.登录mongodb ./bin/mongo 2.查看所有数据库 show dbs  ##默认有admin  和  local两个库 3.创建数据库 use test #创建数据库后,如果不写入数据 ...

  6. Phoenix on HBase

    (一)概要 Apache Phoenix是基于BSD许可开源的一个Java中间层,可以让开发者在Apache HBase上执行SQL查询.Apache Phoenix主要特性: 嵌入式的JDBC驱动, ...

  7. Python ssh 远程执行shell命令

    工具 python paramiko 远程执行命令 import paramiko ssh = paramiko.SSHClient() key = paramiko.AutoAddPolicy() ...

  8. 智课雅思词汇---二十一、名词性后缀acity是什么意思

    智课雅思词汇---二十一.名词性后缀acity是什么意思 一.总结 一句话总结:后缀:-acity [名词后缀] 构成抽象名词,表示性质.状态.情况.与形容词后缀-acious相对应 rapacity ...

  9. RocketMQ原理讲解系列文章

    [RocketMQ原理解析][http://blog.csdn.net/quhongwei_zhanqiu/article/category/2548637] [消息的可靠性.顺序和重复][https ...

  10. python递归中的return"陷阱"

    在做一道练习题(参照下篇博文<在当前目录下递归的查找包含指定字符串的文件>)的时候,发现函数中的return的值竟然是None,百思不得其解,尝试化繁为简,用以下的简单的代码验证了一下 问 ...