oracle 应用程序调用存储函数
package com.founder.ec.common.lucene; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import oracle.jdbc.internal.OracleCallableStatement; import oracle.jdbc.internal.OracleTypes; public class ReadMysql { public static Connection getConnection() throws Exception { String url = "jdbc:oracle:thin:@192.168."; Class.forName("oracle.jdbc.driver.OracleDriver"); String userName = ""; String password = ""; Connection con = DriverManager.getConnection(url, userName, password); return con; } /** * CREATE PROCEDURE member_procedure_out(memberId in NUMBER,realname OUT VARCHAR2,mobile_phone OUT VARCHAR2) */ //释放数据库资源 public static void release(Connection con, CallableStatement call, ResultSet res) { if (res != null || call != null || con != null) { try { res.close(); con.close(); call.close(); } catch (Exception e) { e.printStackTrace(); } finally { res = null; call = null; res = null; } } } public static void main(String[] args) { /** * CREATE PACKAGE mypackage AS TYPE empcursor is REF CURSOR ; PROCEDURE queryEmpList(memberId in NUMBER,empList OUT empcursor); END mypackage; */ try { //调用存储过程,根据会员id获得会员name // testpro(); //调用存储函数,根据会员id计算其年收入 //testfunction(); //调用包下的存储过程,游标 testCursor(); } catch (Exception e) { e.printStackTrace(); } finally { // release(con, call, null); } } private static void testCursor() { Connection con = null; CallableStatement call = null; try { String sql = "{call mypackage.queryEmpList(?,?)}"; con = getConnection(); call = con.prepareCall(sql); call.setInt(1,7923); call.registerOutParameter(2,OracleTypes.CURSOR);//光标 call.execute(); //取出该会员的所有信息 ResultSet res = ((OracleCallableStatement) call).getCursor(2); while (res.next()){ String name=res.getString("real_name"); int memberId=res.getInt("member_id"); System.out.print(name+memberId); } } catch (Exception e) { e.getMessage(); } } private static void testfunction() { Connection con = null; CallableStatement call = null; try { String sql = "{?=call query_member(?)}"; con = getConnection(); call = con.prepareCall(sql); call.registerOutParameter(1,OracleTypes.NUMBER); call.setInt(2,7923); call.execute(); double sum=call.getDouble(1); System.out.println(sum); } catch (Exception e) { e.getMessage(); } } private static void testpro() { Connection con = null; CallableStatement call = null; try { String sql = "{call member_procedure_out(?,?)}"; con = getConnection(); call = con.prepareCall(sql); call.setInt(1, 7923); call.registerOutParameter(2, OracleTypes.VARCHAR); } catch (Exception e) { e.getMessage(); } try { call.execute(); String realName = call.getString(2); System.out.println(realName); } catch (Exception e) { e.printStackTrace(); } } }
create PROCEDURE raise_order_price_procedure(orderId in NUMBER ) as psal ORDER_INFO.paid_fee%TYPE ; BEGIN select paid_fee into psal from ORDER_INFO where ORDER_ID=orderId; where ORDER_ID=orderId; dbms_output.put_line()); END; drop PROCEDURE member_procedure_out; CREATE PROCEDURE member_procedure_out(memberId in NUMBER,realname OUT VARCHAR2) AS BEGIN select m.REAL_NAME into realname from member m where m.MEMBER_ID=memberId; END; / -- BEGIN raise_order_price_procedure(); END; CREATE FUNCTION query_member(memberId in NUMBER) RETURN NUMBER AS psal member.account_fee%type; pcomm member.sum_points%type; BEGIN select account_fee , sum_points INTO psal,pcomm from MEMBER where MEMBER_ID=memberId; ); END; drop PACKAGE mypackage; CREATE PACKAGE mypackage AS TYPE empcursor is REF CURSOR ; PROCEDURE queryEmpList(memberId in NUMBER,empList OUT empcursor); END mypackage; create or replace PACKAGE BODY mypackage AS PROCEDURE queryEmpList(memberId in NUMBER,empList OUT empcursor)as BEGIN OPEN empList for select * from MEMBER where MEMBER_ID=memberId; END queryEmpList; END mypackage; create package emp_pkg is procedure emp_update_ename(v_empno varchar2,v_ename varchar2); function emp_get_sal(v_empno varchar2) return number; end;
oracle 应用程序调用存储函数的更多相关文章
- Spring JDBC调用存储函数
以下示例将演示spring jdbc如何调用存储函数.在这个示例中将通过调用存储函数来读取Student表中的一个可用记录信息.传递一个ID并获取学生的姓名. 语法: SimpleJdbcCall j ...
- oracle之存储过程和存储函数的使用和区别
#存储过程:封装在服务器上一段sql片段,已经编译好了的代码. 1.客户端调存储过程,执行效率就会非常高效. 语法: create [or replace] procedure 存储过程名称 (参数名 ...
- oracle 的自定义的存储函数遇到的 package or function is in an invalid state
转: oracle 的自定义的存储函数遇到的 package or function is in an invalid state 2017-10-28 11:08:17 major_tom 阅读数 ...
- oracle数据库中的存储函数
oracle中的存储函数,和系统内的函数类似,可以像调用系统函数一样调用存储函数.它与存储过程的唯一区别就是存储过程没有return返回值,存储函数可以与存储过程互换,存储函数可以在存储过程中调用. ...
- linux下c程序调用reboot函数实现直接重启【转】
转自:http://www.blog.chinaunix.net/uid-20564848-id-73878.html linux下c程序调用reboot函数实现直接重启 当然你也可以直接调用syst ...
- Oracle数据库---存储过程、存储函数
--创建存储过程CREATE OR REPLACE PROCEDURE first_procISBEGIN DBMS_OUTPUT.PUT_LINE('我是过程'); DBMS_OUTPUT.PUT_ ...
- 编程开发之--Oracle数据库--存储过程和存储函数(2)
上一小结我们简单介绍了存储过程和存储函数,对存储过程和存储函数有了一个基本的了解,接下来介绍在java程序中如何调用我们创建的存储过程和存储函数 1.在应用程序中调用我们的存储过程 创建一个简单的Ja ...
- 编程开发之--Oracle数据库--存储过程和存储函数(1)
1.存储过程和存储函数 描述:指存储在数据库中供所有用户程序调用的子程序叫做存储过程.存储函数 区别:存储函数可以通过return子句返回一个函数的值 (1)存储过程 语法:create [or re ...
- Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)
PL/SQL子程序 它包含了函数和过程.此功能是指用户定义的函数.和系统功能是不同的.子程序通常完成特定的功能PL/SQL座.,能够被不同的应用程序多次调用.Oracle提供能够把PL/SQL程序存储 ...
随机推荐
- 23.centos7基础学习与积累-009-linux目录
从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 linux目录的特点: 1. /是所有目录的顶点. 2. 目录结构像一颗倒挂的树. ...
- Kali下的内网劫持(三)
前面两种说的是在Kali下的ettercap工具通过配合driftnet和urlsnarf进行数据捕获,接下来我要说的是利用Kali下的另外一种抓包分析工具——wireshark来进行捕获数据: 首先 ...
- GTID主从与传统主从复制
目录 1.主从复制 2.靠什么同步 3.pos与GTID的什么区别 4.GTID的工作原理 5.GTID参数配置 5.1 在主数据库里创建一个同步账号授权给从数据库使用 5.2 配置主数据库 5.3配 ...
- 51nod 2500 后面第一个大于
小b有一个长度为n的序列t,现在她对于每个i,求最小的正数j满足i+j≤ni+j≤n且ti+j>titi+j>ti,输出j,如果不存在这样的j,则输出0. 样例解释: 对于i=1,t2&g ...
- 1、Python简介与Python安装
一.Python简介: Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python的创始人为吉多·范罗苏姆(Guido van Rossum)少数几个不秃头的语言创始 ...
- UVa10828 Back to Kernighan-Ritchie——概率转移&&高斯消元法
题意 给出一个程序控制流图,从每个结点出发到每个后继接结点的概率均相等.当执行完一个没有后继的结点后,整个程序终止.程序总是从编号为1的结点开始.你的任务是对于若干个查询结点,求出每个结点的期望执行次 ...
- js实现文字上下滚动效果
大家都知道,做html页面时,为了提升网页的用户体验,我们需要在网页中加入一些特效,比如单行区域文字上下滚动就是经常用到的特效.如下图示效果: <html> <head> &l ...
- 【NOIP2015】斗地主 D1 T3 及 增强版 (送命题)
恶心送命模拟题 暴搜顺子,DP预处理剩下的. 由于官方数据太水,很多情况没有讨论的都能过普通版本,想要测试自己代码正确性的同学们可以交交这道题,有很多dalao给出了hack数据 : Luogu P2 ...
- S1_搭建分布式OpenStack集群_06 nova服务配置 (控制节点)
一.创建数据库(控制节点)创建数据库以及用户:# mysql -uroot -p12345678MariaDB [(none)]> CREATE DATABASE nova_api;MariaD ...
- Windbg命令脚本流程控制语句详解
在Windbg命令脚本一文里,我们介绍了命令脚本语言的的组成要素,在本文里将对语句进行展开的讲解.这些语句主要是流程控制的语句,比如我们常见的条件分子和循环语句等. ; (命令分隔符) 分号(:)字符 ...