Oracle之存储过程

来源:互联网 发布:域名怎么注册 编辑:程序博客网 时间:2024/06/10 00:47

Oracle(持续更新中)

《Oracle11g之安装与卸载》
《Oracle之常用命令》
《Oracle之用户管理》
《Oracle之pl/sql》
《Oracle之块》
《Oracle之存储过程》


  存储过程用于执行特定的操作。当建立存储过程时,既可以指定输入参数(in),也可以指定输出参数(out)。
通过在存储过程中使用输入参数,可以将数据传递到执行部分。通过使用输出参数,可以将执行部分的数据传递到应用环境。在sql/plus中可以使用create procedure 命令来建立过程。

优点:sql语句每次都需要被编译,过程只需要编译一次。实现模块化、减少网络传输量、提高安全性(在Java中调用只需要传参数,而不需要传完整的sql语句)。

缺点:移植性不好,如:更换数据库,所有存储过程需手动导入

目录

一、插入例子

  1. 创建存储过程
  2. 执行存储过程
  3. java中调用存储过程

二、查询例子

  1. 查询结果单一
  2. 查询结果多个

一、插入例子

  插入的存储过程与删除、更改类似。

1、创建存储过程

  代码如下:

create or replace procedure p_insert(param1 in varchar2) isbegin  insert into data(info) values(param1);end;/--以/作为结束,不能直接复制,后续单独加上
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

  解析:
    create or replace :代表创建或替换,也可单独使用create
    p_insert :代表存储过程名
    varchar2:Oracle专有的字符数据类型
    param1:输入参数名

2、执行存储过程

  可以使用 call或exe[cute]执行存储过程

  如图所示:

这里写图片描述

3、java中调用存储过程

  代码如下:

Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//获得连接CallableStatement  cstm = conn.prepareCall("{call p_insert(?)}");//连接对应的存储过程cstm.setString(1, "332211");//插入数据,该参数在第一位,则第一个参数为1cstm.execute();//执行
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、查询例子

  补充:data表是博主自己创建的,内容在上面图中有给出。

1、查询结果单一

  (1)创建存储过程

    代码如下:

create or replace procedure p_query1(param1 in varchar2,param2 out varchar2) isbegin--查询结果使用into 放入param2变量(查询结果单一)  select info into param2 from data where info=param1;end;/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

  (2)java中调用存储过程

    代码如下:

        Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动        Connectionconn conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//获得连接        CallableStatement  cstm = conn.prepareCall("{call p_query1(?,?)}");//连接对应的存储过程p_query1        cstm.setString(1, "ccc");//设置查询数据为ccc,该参数在第1位        cstm.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR); //设置返回类型        cstm.execute();//执行        String result = cstm.getString(2);//得到返回数据        System.out.println("执行结果:"+result);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

java代码中,设置返回类型要与创建存储过程中时一致。

    结果如图所示:

这里写图片描述

2、查询结果多个

  (1)创建package

    包名为pack_info,内部定义个游标类型。

create or replace package pack_info is--定义一个游标类型,名为c_infotype c_info is ref cursor;end pack_info;/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5

  (2)创建存储过程

create or replace procedure p_query2(param1 in varchar2,param2 out pack_info.c_info) isbegin--打开游标执行查询语句 open param2 for select * from data where info=param1;end;/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

pack_info.c_info:代表使用pack_info中的c_info类型,该类型为游标类型。

  (3)java中调用存储过程

    代码如下:

        Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动        Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//获得连接        CallableStatement  cstm = conn.prepareCall("{call p_query2(?,?)}");//连接对应的存储过程        cstm.setString(1, "ccc");//设置查询数据,该参数在第1位        cstm.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR); //设置返回类型为游标        cstm.execute();//执行        ResultSet result = (ResultSet) cstm.getObject(2);//得到返回数据        while (result.next()) {            System.out.println(result.getString("info"));            System.out.println(result.getString("num"));            }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

    结果如图所示:

这里写图片描述

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孩子对学习成绩无所谓怎么办 孩子脾气特别倔强怎么办 没有规矩的孩子怎么办 孩子情商太低怎么办 4岁宝宝缺乏自信怎么办 孩子害羞不自信怎么办 说话脸红的人怎么办 胆小自卑不自信怎么办 孩子爱挑衣服怎么办 厌学症的孩子怎么办 小孩太自死了怎么办 宝宝老是得肺炎怎么办 社保卡断档了怎么办 北京儿童怎么办医保卡 股票开户不用了怎么办 高中生玩游戏父母怎么办 高中生爱玩游戏怎么办 宝贝发烧不退烧怎么办 孩子行笔速度慢怎么办 孩子不会读英语怎么办 太注意小孩考试成绩怎么办 二年级成绩很差怎么办 班级差生应该怎么办 班级差生太多怎么办 初三孩子英语差怎么办 初三英语基础差怎么办 学生学习效率低怎么办 摔伤后皮下血肿怎么办 孩子学习效率低怎么办 很多作业没写完怎么办? 小学孩子成绩差怎么办 孩子脚上起水泡怎么办 小学一年级体育课哑铃怎么办 托福成绩失效后怎么办 去外国旅游不适应怎么办 一年级语文成绩差怎么办 一年级小孩成绩差怎么办 一年级小孩基础差怎么办 一年级小孩语文差怎么办 一年级小孩数学差怎么办 一年级小孩理解能力差怎么办