`
zhongzhihua
  • 浏览: 313787 次
  • 来自: ...
社区版块
存档分类
最新评论

oracle的存储过程和函数以及java如何调用oracle的存储过程和函数

    博客分类:
  • java
阅读更多

过程和函数
 a.将过程的执行权限授予其他用户:GRANT EXECUTE ON find_emp TO MARTIN;
 b.删除过程:DROP PROCEDURE find_emp
 c.函数的调用:SELECT fun_hello FROM DUAL;
  d.查看所有的过程:select object_name,created,status from user_objects
                             where object_type in ('PROCEDURE','FUNCTION')
  e.查看过程源码  select text from user_source where name='procedure_name';

1.在命令窗口中调用有一个in参数,一个out参数的存储过程
    CREATE OR REPLACE PROCEDURE FIND_EMP(AID in CHAR,res out varchar2)
   AS
   ENAME DEPTO.NAME%TYPE;
   BEGIN
   SELECT NAME INTO ENAME from bankaccount  WHERE ID=AID;
   res:='姓名是:'||ename;
   EXCEPTION
   WHEN NO_DATA_FOUND THEN
   res:='not found';
   END FIND_EMP;
  调用:
   VAR SSS VARCHAR2;
      EXECUTE FIND_EMP('1111',:SSS);
   用java调用:
   import java.sql.CallableStatement;
   import java.sql.Connection;
   import java.sql.DriverManager;
   import java.sql.ResultSet;
   import java.sql.Types;
   
    public class Sub
   {  
    static Connection co=null;
    public static Connection connection()
    {
     try
     {
     Class.forName("oracle.jdbc.driver.OracleDriver");
     co=DriverManager.getConnection
                   ("jdbc:oracle:thin:@192.168.0.111:1521:emp","scott","admin");
     }catch(Exception e)
     {
      System.out.println(e);
     }
     return co;
    }
    public void query() throws Exception
    {
       Connection conn=connection();
       CallableStatement c=conn.prepareCall("{call FIND_EMP(?,?)}");
       c.registerOutParameter(2,Types.VARCHAR);
       c.setString(1,"11111");
       c.execute();
       String bal=c.getString(2);
       System.out.println(bal);  
       conn.close();
    }
    public static void main(String args[]) throws Exception
    {
     Sub f=new Sub();
     f.query();
    }
   }
 2.在java中调用pl/sql函数例子
     函数:
       CREATE OR REPLACE FUNCTION query3(id1 in char) RETURN VARCHAR2
            AS BAL VARCHAR2(20);
            A_ID CHAR(5);
            BEGIN
            SELECT BALANCE INTO  A_ID FROM BANKACCOUNT where ID=id1;
            BAL:='您的余额为'||A_ID;
             RETURN BAL;
            END query3;
     调用:
     import java.sql.CallableStatement;
     import java.sql.Connection;
     import java.sql.DriverManager;
     import java.sql.ResultSet;
     import java.sql.Types;
     
      class Function
     {  
      static Connection co=null;
      public static Connection connection()
      {
       try
       {
       Class.forName("oracle.jdbc.driver.OracleDriver");
       co=DriverManager.getConnection
                     ("jdbc:oracle:thin:@192.168.0.111:1521:emp","scott","admin");
       }catch(Exception e)
       {
        System.out.println(e);
       }
       return co;
      }
      public void query() throws Exception
      {
         Connection conn=connection();
         CallableStatement c=conn.prepareCall("{? = call QUERY3(?)}");
         c.registerOutParameter(1,Types.VARCHAR);
         c.setString(2,"11111");
         c.execute();
         String bal=c.getString(1);
         System.out.println(bal);  
         conn.close();
      }
      public static void main(String args[]) throws Exception
      {
       Function f=new Function();
       f.query();
      }
     }
3.调用一个in参数,一个out参数的另一种方法
      CREATE OR REPLACE PROCEDURE TEST(VAL1 IN VARCHAR2,VAL2 OUT NUMBER) IS
   IDD NUMBER;
   BEGIN
   SELECT ID INTO IDD FROM DEPTO WHERE ADDRESS=VAL1;
   IF SQL%FOUND THEN
   VAL2:=300;
   END IF;
   END;
    调用:
   DECLARE
   VA1 DEPTO.ADDRESS%TYPE:='dalu';
   VA2 NUMBER;
   BEGIN
   TEST(VA1,VA2);
   DBMS_OUTPUT.PUT_LINE(VA2);
   END;
4.利用函数/过程返回结果集.
     利用函数:
         定义包:create or replace package pkg_resultset
        as
        type yourtype is ref cursor;
        function operation_resultset(phonenumber varchar2) return yourtype;
        end pkg_resultset;
     定义包体:
            create or replace package  body pkg_resultset
        as
        function operation_resultset(phonenumber varchar2) return yourtype
        is
        yourcur yourtype;
        begin
        open yourcur for SELECT a.operation_name, c.charge_kind, c.charge FROM
           t_phone_operation a,t_phone_operation_charge b, t_cost c
         where a.operation_id=b.operation_id and b.phone_num=phonenumber and
               b.operation_id=c.operation_id;
        return yourcur;
        end operation_resultset;
        end pkg_resultset;
    在java中调用:
          String phoneNum = querybuniessForm.getPhonenumber();
       Connection conn=ConnectDataBase.connection();
       ActionForward mg=null;
       CallableStatement cs=null;
       try
       {
       cs=conn.prepareCall("{call queryphonenumber(?,?)}");
       cs.registerOutParameter(2,Types.VARCHAR);
       cs.setString(1,phoneNum);
       cs.execute();
       String res=cs.getString(2);
       ActionErrors errors=new ActionErrors();
       cs.close();
       ResultSet rs=null;
       if(res.equals("无此手机号"))
       {
        errors.add("notfoundnumber",new ActionError("notfoundnumber"));
           this.saveErrors(request,errors);
        mg=mapping.getInputForward();
           
       }else
       { errors.add("foundnumber",new ActionError("foundnumber"));
           this.saveErrors(request,errors);
        mg=mapping.getInputForward();
        CallableStatement cs2=null;
        cs2=conn.prepareCall("{?=call pkg_resultset.operation_resultset(?)}");
        cs2.registerOutParameter(1,OracleTypes.CURSOR);
        cs2.setString(2,phoneNum);
        cs2.execute();
        rs = ((OracleCallableStatement)cs2).getCursor(1);
        while(rs.next())
        {
         System.out.print(rs.getString(1)+" ");//输出第一个字段
         System.out.print(rs.getString(2)+" ");//输入第二个字段
         System.out.print(rs.getString(3)+" ");
         
         
        }........
    利用过程:
          定义包:
              create or replace package pkg_resultset
        as
        type yourtype is ref cursor;
        function operation_resultset(phonenumber varchar2) return yourtype;
        end pkg_resultset;
      定义包体:
          create or replace package body wyj
        as
        PROCEDURE   wyj1(phoneNum in varchar2,res   OUT  res1)
        is
        BEGIN
         OPEN res FOR
         SELECT a.operation_name, c.charge_kind, c.charge FROM
          t_phone_operation a,t_phone_operation_charge b, t_cost c
         where a.operation_id=b.operation_id and b.phone_num=phoneNum and
               b.operation_id=c.operation_id;
        END wyj1;
        end wyj;
    在java中调用:同上....
5.在java中调用存储过程返回结果集,并在jsp页面中显示出结果的方法.(以struts工程为例)
   主要思路:在包内定义一个funcion或procudure,返回类型为游标,然后在java中得到结果集并遍历他们
   以得到其中字段的结果,把他们放到一个bean中,并把bean放到ArrayList对象中,最后在jsp页面中用struts
   标签得到结果.
    在oracle中定义上述4中的包和包体,"pkg_resultset",在Action这样使用:
       ......
      errors.add("foundnumber",new ActionError("foundnumber"));
    this.saveErrors(request,errors);
   mg=mapping.getInputForward();
   CallableStatement cs2=null;
   cs2=conn.prepareCall("{?=call pkg_resultset.operation_resultset(?)}");
   cs2.registerOutParameter(1,OracleTypes.CURSOR);
   cs2.setString(2,phoneNum);
   cs2.execute();
   rs = ((OracleCallableStatement)cs2).getCursor(1);
   ArrayList list = new ArrayList();
   while(rs.next())
   { 
    String operationName = rs.getString(1);
    String operationType = rs.getString(2);
    String operationCharge = rs.getString(3);
    System.out.println(operationName);
    System.out.println(operationType);
    System.out.println(operationCharge);
    GetResultList resultList=new GetResultList    //见下面的bean类
           (operationName,operationType,operationCharge);  
      list.add(resultList);
   }
    request.setAttribute("GetResultLists",list);
    //下面是一个bean类
   package com.penguin.bean;
   public class GetResultList
   {
    private String operationName;
    private String operationType;
    private String operationCharge;
    
    public  GetResultList(String operationName,String operationType,String operationCharge)
    {
     this.operationCharge=operationCharge;
     this.operationName=operationName;
     this.operationType=operationType;
    }
    public String getOperationCharge() {
     return operationCharge;
    }
    public void setOperationCharge(String operationCharge) {
     this.operationCharge = operationCharge;
    }
    public String getOperationName() {
     return operationName;
    }
    public void setOperationName(String operationName) {
     this.operationName = operationName;
    }
    public String getOperationType() {
     return operationType;
    }
    public void setOperationType(String operationType) {
     this.operationType = operationType;
    }
   }
   然后在jsp页面中用标签:
     
   <%@ page language="java" pageEncoding="UTF-8"%>
   <%@ taglib uri="http://jakarta.apache.org/struts/tags-bean " prefix="bean" %>
   <%@ taglib uri="http://jakarta.apache.org/struts/tags-html " prefix="html" %>
   <%@ taglib uri="http://jakarta.apache.org/struts/tags-logic " prefix="logic" %>
   <%@ taglib uri="http://jakarta.apache.org/struts/tags-tiles " prefix="tiles" %>
   <%@ taglib uri="http://jakarta.apache.org/struts/tags-template " prefix="template" %>
   <%@ taglib uri="http://jakarta.apache.org/struts/tags-nested " prefix="nested" %>
   
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   <html:html locale="true">
     <head>
       <html:base />
      
       <title>query.jsp</title>
      
       <meta http-equiv="pragma" content="no-cache">
       <meta http-equiv="cache-control" content="no-cache">
       <meta http-equiv="expires" content="0">   
       <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
       <meta http-equiv="description" content="This is my page">
     </head>
    
     <body>
       <html:form action="querybuniess.do" method="post" focus="login">
         <table >
           <tr>
             <td>phone number:</td>
             <td><html:text property="phonenumber" /></td>
             <td><html:submit value="搜索" /></td>
             <td><font color="red"><html:errors property="phonenumbererr"/></font></td>
             <td><font color="red"><html:errors property="notfoundnumber"/></font></td>
             <td><FONT color="red"><html:errors property="foundnumber"/></FONT></td>
           </tr>
           </table>
          <br>
          <br>
        <logic:present name="GetResultLists" scope="request">
        <table cellspacing="1" border="1" width="500" >
      <tr>
       <th align="center" >栏目名</th>
       <th align="center" >资费类型</th>
       <th align="center" >金额</th>
       </tr>
       <logic:iterate id="GetResultList" name="GetResultLists">
        <logic:present name="GetResultList">
       <tr>
         <td align="center" ><bean:write name="GetResultList" property="operationName"/></td>
         <td align="center" ><bean:write name="GetResultList" property="operationType"/></td>
         <td align="center" ><bean:write name="GetResultList" property="operationCharge"/></td>
      </tr>
       </logic:present>
      </logic:iterate>
     </logic:present>
         </table>
       </html:form>
     </body>
   </html:html>

分享到:
评论

相关推荐

    基于python深度学习对船舶进行目标检测-含摄像头识别-含代码和数据集.zip

    本代码是基于python pytorch环境安装的。下载本代码后,有个环境安装的requirement.txt文本,环境需要自行配置。或可直接参考下面博文进行环境安装。 https://blog.csdn.net/no_work/article/details/144331388 安装好环境之后, 代码如需重新训练的话,需要依次运行 01、02、03py文件。 ,如果只是调用已经训练好的模型,去做识别的话,直接运行03pyqt.py即可 以下关于每个py文件的介绍: 输入指令python 01划分数据集.py 就会将我们的数据集转成yolo格式的txt,同时生成train.txt和val.txt,和配置文件data.yaml 运行02train.py即可开始训练模型。 最后运行03pyqt.py文件就有pyqt的可视化界面。 通过点击加载图片按钮,来选择我们要识别的图片,再点击检测按钮就可以完成识别了。 如果要使用摄像头检测功能直接点击摄像头按钮即可实时检测。

    基于小程序的家具购物小程序源代码(php+小程序+mysql+LW).zip

    个人中心:用户可以在这里管理自己的个人信息,如查看和更新个人资料、订单历史、收藏等。 用户管理:这个模块可能用于管理用户账户,包括注册、登录、权限分配等。 家具分类管理:用于管理家具的分类,比如客厅家具、卧室家具、厨房家具等,方便用户根据类别浏览商品。 家具新品管理:这个模块可能用于管理新上架的家具产品,包括新品的添加、展示和推广。 系统管理:涉及到小程序的后台管理,可能包括系统设置、数据维护、安全监控等功能。 订单管理:用户可以在这里查看和管理自己的订单,包括下单、支付、查看订单状态、售后服务等。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

    【电力负荷预测】基于matlab沙猫群算法优化回声神经网络SCSO-ESN电力负荷预测(多输入单输出)【Matlab仿真 5350期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于微信的疫情期间学生请假与销假系统的设计与实现源代码(java+小程序+mysql+LW).zip

    基于微信的疫情期间学生请假与销假系统的设计与实现源代码(java+小程序+mysql+LW).zip

    【JCR一区级】基于matlab金豺算法GJO-CNN-BiLSTM-Attention故障诊断分类预测【Matlab仿真 5449期】.zip

    CSDN Matlab研究室上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    基于中医药知识图谱智能问答源码+文档+全部资料.zip

    【资源说明】 基于中医药知识图谱智能问答源码+文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    机器学习(视觉识别):真实人脸和AI生成的人脸图像数据集

    旨在为机器学习和深度学习应用提供高质量的真实人脸和AI生成的人脸图像。这个数据集对于开发和测试能够区分真实和AI生成面部图像的分类器至关重要,适用于深度伪造检测、图像真实性验证和面部图像分析等任务。 该数据集精心策划,支持前沿研究和应用,包含了从多种“灵感”源(如绘画、绘图、3D模型、文本到图像生成器等)生成的图像,并通过类似StyleGAN2潜在空间编码和微调的过程,将这些图像转化为照片级真实的面部图像。数据集还包含了面部标志点(扩展的110个标志点集)和面部解析语义分割图。提供了一个示例脚本(explore_dataset.py),展示了如何在数据集中访问标志点、分割图,以及如何使用CLIP图像/文本特征向量进行文本搜索,并进行一些探索性分析。 数据集的四个部分总共包含了约425,000张高质量和策划的合成面部图像,这些图像没有隐私问题或许可证问题。这个数据集在身份、种族、年龄、姿势、表情、光照条件、发型、发色等方面具有高度的多样性。它缺乏配饰(如帽子或耳机)以及各种珠宝的多样性,并且除了头发遮挡前额、耳朵和偶尔眼睛的自我遮挡外,不包含任何遮挡。

    java毕设项目之基于springboot框架开发的景区民宿预约系统的设计与实现(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3

    基于豆瓣图书的推荐、知识图谱与知识引擎简单构建neo4j源码+文档+全部资料.zip

    【资源说明】 基于豆瓣图书的推荐、知识图谱与知识引擎简单构建neo4j源码+文档+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    ROM数据库框架EFCore使用示例源码,vs2022运行通过

    ROM数据库框架EFCore使用示例源码,vs2022运行通过

    基于小程序的驾校预约管理系统源代码(java+小程序+mysql+LW).zip

    实现了首页、个人中心、学员管理、教练管理、驾校信息管理、驾校车辆管理、教练预约管理、考试信息管理、预约考试管理、系统管理等。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

    如愿公益文件v7-2(3).zip

    如愿公益文件v7-2(3).zip

    基于小程序的书橱源代码(java+小程序+mysql+LW).zip

    (1)管理员功能分析 管理员可进行后台进行管理,包含个人中心、图书信息管理、图书类型管理、电子书论坛以及系统管理。 (2)用户功能分析 用户注册登录后主要功能模块包括首页、图书信息、电子书论坛以及我的(图书信息、阅读记录、我要发帖、我的发帖)。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

    基于小程序的民大食堂用餐综合服务平台源代码(java+小程序+mysql+LW).zip

    本基于微信小程序的民大食堂用餐综合服务平台有管理员,商家,用户。管理员功能有个人中心,用户管理,商家管理,档口号管理,商家餐品管理,餐品种类管理,购物车管理,订单信息管理,签到信息管理,优惠活动管理,我的活动管理,系统管理等。商家功能有个人中心,商家餐品管理,餐品种类管理,购物车管理,订单信息管理,签到信息管理,优惠活动管理,我的活动管理等。用户可以订餐。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

    java毕设项目之基于springboot的的学生干部管理系统(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3

    Python经典题库及答案(67页)

    Python经典题库及答案(67页)

    基于小程序的图书馆自习室座位预约管理微信小程序源代码(java+小程序+mysql+LW).zip

    管理员权限主要实现了管理员服务端;首页、个人中心、学生管理、座位信息管理、自习室分类管理、座位预约管理、学院分类管理、专业分类管理、留言板管理、系统管理,学生微信端;首页、座位信息、座位预约、我的等功能,基本上实现了整个图书馆自习室座位预约小程序信息管理的过程。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

    java毕设项目之基于SpringBoot的房屋交易平台的设计与实现(完整前后端+说明文档+mysql+lw).zip

    项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java 框架:springboot,mybatis JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3

    文件网络安全学习视频我爱i

    文件网络安全学习视频我爱i

    基于小程序的酒店管理系统源代码(java+小程序+mysql+LW).zip

    本基于微信小程序开发的酒店管理系统管理员,酒店管理员以及用户。管理员功能可以管理个人中心,用户信息管理,酒店管理员管理,房间类型管理,房间信息管理,订单信息管理,系统管理等。用户可以预定酒店。 项目包含完整前后端源码和数据库文件 环境说明: 开发语言:Java JDK版本:JDK1.8 数据库:mysql 5.7 数据库工具:Navicat11 开发软件:eclipse/idea Maven包:Maven3.3 部署容器:tomcat7 小程序开发工具:hbuildx/微信开发者工具

Global site tag (gtag.js) - Google Analytics