• oracle--存储过程2--bk


    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();
    	}	
    }
    }
    ===========================================================================
    

      

  • 相关阅读:
    indexDB的用法
    append动态生成的元素,无法触发事件的原因及解决方案
    jquery中attr()和prop()的区别
    arguments.callee
    meter标签度量衡如何改变颜色
    Nginx入门
    linux中的权限管理
    python_面向对象
    ORM
    Flask入门
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6323664.html
Copyright © 2020-2023  润新知