oracle存储过程demo1---无返回值的存储过程:

/*
写一个过程,可以向book表添加书
*/ create table book(
id number(4),
book_name varchar2(30),
publishing varchar2(30)
) create or replace procedure add_book
(
id in number,
name in varchar2,
publishing in varchar2
)is
begin
insert into book values(id,name,publishing);
commit;
end; package com.etc.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class CunChuDemo1 {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动
Connection ct = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "orcl");//获取链接
CallableStatement cs = ct.prepareCall("call add_book(?,?,?)");//创建CallableStatement
//给?赋值
cs.setInt(1, 1);
cs.setString(2, "java");
cs.setString(3, "java出版社");
//执行
cs.execute();
//关闭
cs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
==============================================================
oracle存储过程demo2---有返回值的存储过程(非列表): /*
编写一个存储过程,可以输入雇员的编号,返回该雇员的姓名。
*/ create or replace procedure sp_proc
(
spno in number,
spname out varchar2
)is
begin
select ename into spname from emp where empno=spno;
end; package com.etc.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class CunChuDemo1 {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); // 1.加载驱动
Connection ct = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "orcl");// 2.得到连接
CallableStatement cs = ct.prepareCall("call sp_proc(?,?)");// 3.创建CallableStatement
cs.setInt(1, 7788); //给第一个?赋值
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR);//给第二个?赋值
cs.execute();//4、执行
//取出返回值,要注意?的顺序
String name = cs.getString(2);
System.out.println("编号7788的名字:" + name);
cs.close();//5、关闭
} catch (Exception e) {
e.printStackTrace();
}
}
}
----------------------------------------------------------------
扩张:编写一个过程,可以输入雇员的编号,返回该雇员的姓名、工资和岗位。 create or replace procedure sp_proc
(
spno in number,
spname out varchar2,
spsal out number,
spjob out varchar2
)is
begin
select ename,sal,job into spname,spsal,spjob from emp where empno=spno;
end; package com.etc.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
public class CunChuDemo1 {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");// 1.加载驱动
Connection ct = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "orcl");// 2.得到连接
CallableStatement cs = ct.prepareCall("call sp_proc(?,?,?,?)"); // 3.创建CallableStatement
cs.setInt(1, 7788); //给第一个?赋值
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR); //给第2个?赋值
cs.registerOutParameter(3, oracle.jdbc.OracleTypes.DOUBLE); //给第3个?赋值
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR); //给第4个?赋值
cs.execute(); //4、执行
//取出返回值,要注意?的顺序
String name = cs.getString(2);
double sal = cs.getDouble(3);
String job = cs.getString(4);
System.out.println("编号7788的名字:" + name + ",职位" + job + ",薪水" + sal + "");
cs.close(); //5、关闭
} catch (Exception e) {
e.printStackTrace();
}
}
}
====================================================================
oracle存储过程demo3---有返回值的存储过程(列表[结果集]): /*
编写一个存储过程,输入部门号,返回该部门所有雇员信息。
*/
分析如下:由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,
但由于是集合,所以不能用一般的参数,必须要用pagkage了。所以要分两部分:
1)、建立一个包,在该包中我们定义类型test_cursor,它是个游标。 create or replace package testpackage
as
type test_cursor is ref cursor;
end testpackage; 2)、建立存储过程。
create or replace procedure sp_proc
(
spno in number,
p_cursor out testpackage.test_cursor
)is
begin
open p_cursor for
select * from emp where deptno=spno;
end sp_proc; package com.etc.test;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
public class CunChuDemo1 {
public static void main(String[] args) {
try {
Class.forName("oracle.jdbc.driver.OracleDriver"); // 1.加载驱动
// 2.得到连接
Connection ct = DriverManager.getConnection(
"jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "orcl");
CallableStatement cs = ct.prepareCall("call sp_proc(?,?)"); // 3.创建CallableStatement
cs.setInt(1, 10); //给第1个?赋值
cs.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR); //给第二个?赋值
cs.execute(); //4、执行
//得到结果集
ResultSet rs = (ResultSet) cs.getObject(2);
while (rs.next()) {
System.out.println(rs.getInt(1) + " " + rs.getString(2) + " " + rs.getString(3) + " " + rs.getInt(4)
+ " " + rs.getDate(5)+ " " + rs.getInt(6)+ " " + rs.getInt(7)+ " " + rs.getInt(8));
}
//5、关闭
rs.close();
cs.close();
ct.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
===========================================================================

  

oracle--存储过程2--bk的更多相关文章

  1. oracle 存储过程

    来自:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 I ...

  2. Oracle存储过程语法

    原文链接:http://www.jb51.net/article/31805.htm Oracle存储过程基本语法 存储过程  1 CREATE OR REPLACE PROCEDURE 存储过程名  ...

  3. ORACLE存储过程调用Web Service

    1. 概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明.其他主流数据库,比如mysql和sq ...

  4. Oracle存储过程基本语法介绍

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  5. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  6. Oracle存储过程(转)

    Oracle存储过程基本语法 存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR RE ...

  7. Oracle存储过程中异常Exception的捕捉和处理

    Oracle存储过程中异常的捕捉和处理 CREATE OR REPLACE Procedure Proc_error_process ( v_IN in Varchar2, v_OUT Out Var ...

  8. Oracle存储过程动态创建临时表/存储过程执行权限问题--AUTHID CURRENT_USER

    关于Oracle存储过程执行权限问题的解决 http://blog.sina.com.cn/s/blog_6ceed3280101hvlo.html (2014-04-02 04:06:28) 转载▼ ...

  9. ORACLE存储过程学习

    存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE ...

  10. C# 获取 oracle 存储过程的 返回值1

    /// <summary> /// 返回对应表的模拟自增字段值 /// </summary> /// <param name="tablename"& ...

随机推荐

  1. mysql 数据库备份方案及策略

    由于mysql存在多种数据库备份方式,而且各有利弊,对于我们初学者来说,选择合适的备份方式确实有些困难.个人觉得,首先要基于公司的需求,考虑能够容忍丢失多少数据.花多少人力时间成本等,这是我们制定备份 ...

  2. javascript数字时钟

    <html> <head> <script type="text/javascript"> function startTime() { var ...

  3. POJ3614 贪心+优先队列

    题意:m头牛每头牛有minspf和maxspf,n种spf为spf[i]的防晒霜每种l[i]瓶,尽可能给数量多的牛涂防晒霜,每头牛最多涂一瓶. 思路:贪心想法,实现是每次取出minspf<=sp ...

  4. castle windsor学习-----Inline dependencies 依赖

    应用程序中的很多组件都会依赖其他的服务组件,很多依赖一些不合法的组件或者容器中没有的组件,例如int类型.string类型.TimeSpan类型 Windsor支持以上的场景,注册API有Depend ...

  5. RSA加密方法java工具类

    package com.qianmi.weidian.common.util; import java.io.ByteArrayOutputStream; import java.security.K ...

  6. jQuery 对表单、表格的操作及更多应用-简略笔记

    [jQuery 对表单.表格的操作及更多应用] jquery对表单及表格的操作是实际应用中相当广泛. 对于表单的操作,可以实现 (1)获取和失去焦点改变样式: (2)在多行文本框中可以实现网站评论框的 ...

  7. Linux下重命名文件或文件夹(mv命令与rename命令)

    在Linux下重命名文件或目录,可以使用mv命令或rename命令 mv ———————————— mv命令既可以重命名,又可以移动文件或文件夹. 例子:将目录A重命名为B mv A B 例子:将/a ...

  8. Git_错误_02_error: src refspec master does not match any

    现象:在一个目录下初始化仓库之后,就开始push到github,结果出现了这个错误. 错因:初始化仓库之后,并没有使用git add,git commit 命令将文件添加到git仓库中,所以仓库为空, ...

  9. AngularJS-指令command

    directive: 匹配模式restrict:'AEMC'默认为A template templateUrl templateCache:把模板缓存起来,共多个指令使用 var myModule = ...

  10. ajax stream 一边下载二进制数据一边处理

    最近有在做 stream 下载,并且边下载 stream 边处理功能.解析二进制的功能.最初参考了 flv.js 的 flv stream 下载处理功能,发现他并没有使用的 XMLHttpReques ...