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. 3.08课·········switch case及if else嵌套(日期格式)

    switch case switch (n) { : break; : break; . . . case n: break; } 1.switch case必须与break一同使用,每一个case后 ...

  2. Android TableLayout 表格布局

    TableLayout继承LinearLayout 有多少个TableRow对象就有多少行, 列数等于最多子控件的TableRow的列数 直接在TableLayout加控件,控件会占据一行 Table ...

  3. Python map,reduce,filter,apply

    map(function, iterable, ...) map()函数接收两个参数,一个是函数,一个是可迭代的对象,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. 基本等 ...

  4. 事件监听机制——鼠标事件MouseEvent

    鼠标事件 鼠标事件包括鼠标的双击.左击.右击.中间键等等,本文进行事件加载进行简单介绍,具体可以参考键盘事件. import java.awt.*; import java.awt.event.*; ...

  5. 【leetnode刷题笔记】Maximum Depth of binary tree

    Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the long ...

  6. python 3 模块

    python3 模块 一 .模块 1 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. import加载的模块分为四个通用类别: 1 ...

  7. 3像素文本偏移bug 解决方案

    <style>.box1{ width:100px; height:50px; float:left; background:#dedede;_margin-right:-3px;}.bo ...

  8. 【DP】最长不下降子序列问题(二分)

    Description 给你一个长度为n的整数序列,按从左往右的顺序选择尽量多的数字并且满足这些数字不下降. Thinking 朴素dp算法:F[i]表示到第i位为止的最长不下降子序列长度 F[i]= ...

  9. Idea 包名按树形结构展示

    Idea默认包名展示如图: 感觉这样展示,在包下面建包的时候不方便,可以在 设置按钮 里面去掉 Flatten Packages 和 Compact Empty Middle Packages,设置如 ...

  10. 中美贸易战再次开启,世界两极化进程正在加快形成!..... Copyright: 1688澳洲新闻网 Read more at: https://www.1688.com.au/world/international/2018/06/17/369368/

    中美贸易战再次开启,世界两极化进程正在加快形成! https://www.1688.com.au/world/international/2018/06/17/369368/