oracle存储过程--在应用程序中访问存储过程程序完整举例
来源:互联网 发布:java虚拟机怎么安装 编辑:程序博客网 时间:2024/06/04 19:03
认识存储过程和函数
存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块。但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的。和PL/SQL程序相比,存储过程有很多优点,具体归纳如下:
* 存储过程和函数以命名的数据库对象形式存储于数据库当中。存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码。
* 存储过程和函数可由数据库提供安全保证,要想使用存储过程和函数,需要有存储过程和函数的所有者的授权,只有被授权的用户或创建者本身才能执行存储过程或调用函数。
* 存储过程和函数的信息是写入数据字典的,所以存储过程可以看作是一个公用模块,用户编写的PL/SQL程序或其他存储过程都可以调用它(但存储过程和函数不能调用PL/SQL程序)。一个重复使用的功能,可以设计成为存储过程,比如:显示一张工资统计表,可以设计成为存储过程;一个经常调用的计算,可以设计成为存储函数;根据雇员编号返回雇员的姓名,可以设计成存储函数。
* 像其他高级语言的过程和函数一样,可以传递参数给存储过程或函数,参数的传递也有多种方式。存储过程可以有返回值,也可以没有返回值,存储过程的返回值必须通过参数带回;函数有一定的数据类型,像其他的标准函数一样,我们可以通过对函数名的调用返回函数值。
存储过程和函数需要进行编译,以排除语法错误,只有编译通过才能调用。
首先得有表盒数据,那么第一步就是创建表盒插入数据:
SQL> create table emp 2 (empno number, 3 ename varchar2(10), 4 sal number, 5 job varchar2(100) 6 ); Table created SQL> insert into emp values(1,'王一',10000,'软件工程师'); 1 row inserted SQL> insert into emp values(2,'王二',8000,'摄影师'); 1 row inserted SQL> select * from emp; EMPNO ENAME SAL JOB---------- ---------- ---------- -------------------------------------------------------------------------------- 1 王一 10000 软件工程师 2 王二 8000 摄影师 SQL>现在叫我们查询某个员工姓名,月薪和职位,那么我们创建一个存储过程如下:
--out参数:查询某个员工姓名,月薪和职位/* 思考: 1、查询某个员工的所有信息-->out参数太多? 2、查询某个部门中所有员工的所有信息-->out中返回集合?*/--删除存储过程create or replace procedure queryempincome1(eno in number, pename out varchar2, psal out number, pjob out varchar2)as begin --得到该员工的姓名、月薪和职位 select ename,sal,job into pename,psal,pjob from emp where empno=eno; end;/
然后我们在eclipse里面编写Java代码链接oracle数据库和访问存储过程,在控制台输出指定id的用户的基本信息:
package cn.edu.jdbc;import java.sql.CallableStatement;import java.sql.Connection;import oracle.jdbc.OracleTypes;import org.junit.Test;/** * create or replace procedure queryempinform(eno in number, pename out varchar2, psal out number, pjob out varchar2) * @author wf * */public class TestProcedure {@Testpublic void testProcedure(){//{call <procedure-name[(<arg1>,<arg2>,<arh3>...)]>}String sql = "{call queryempincome1(?,?,?,?)}";Connection connection = null;CallableStatement call = null;try {//得到一個连接connection = JDBCUtils.getConnection();//通过连接创建输出statementcall = connection.prepareCall(sql);//对于in(输入)参数,要赋值call.setInt(1, 2);//为第一个存储过程的参数赋值为1表示查询编号为1的员工信息//对于out(输出),需要申明//call.registerOutParameter(2, sqlType);call.registerOutParameter(2, OracleTypes.VARCHAR);//指定oracle的输出参数类型call.registerOutParameter(3, OracleTypes.NUMBER);call.registerOutParameter(4, OracleTypes.VARCHAR);//执行调用call.execute();//取出结果String name = call.getString(2);Double sal = call.getDouble(3);String job = call.getString(4);System.out.println("姓名:"+name+"\t"+"薪水:"+sal+"\t"+"工作:"+job);} catch (Exception e) {e.printStackTrace();}}}
0 0
- oracle存储过程--在应用程序中访问存储过程程序完整举例
- oracle存储过程举例
- 在应用程序中调用Oracle存储过程和存储函数
- oracle在存储过程中调用存储过程
- 在存储过程中访问视图授权
- Oracle存储过程中调用JAVA程序
- Oracle中存储过程
- oracle中存储过程
- Oracle中存储过程
- Oracle中存储过程
- oracle 存储过程创建和使用举例
- Java程序调用存储过程应用举例
- oracle 存储过程中调用存储过程
- java 访问oracle存储过程
- Oracle存储过程访问同义词
- java访问oracle存储过程
- 在java语言中访问存储过程和存储函数
- 在Oracle存储过程中实现分页
- Java深度历险(八)Java I/O
- 24 - Swap Nodes in Pairs
- HDU 2444 (二分图判定+最大匹配)
- hdu 2566 放大的X
- 架构里没有大写的“I”
- oracle存储过程--在应用程序中访问存储过程程序完整举例
- hdu 5400 Arithmetic Sequence(水题一道)
- UVA 11019 Matrix Matcher
- HDU5390 tree dfs序+线段树分层离线+字典树求异或最大值
- 视音频技术零基础学习笔记(四)及解码程序添加注释
- 活动的生命周期、四大布局(一)
- CSU 1671 经营小卖部
- JAVA中利用不规则二维数组输出杨辉三角形
- 2015-8-15比赛总结