-
public class TestCursor{ @Test public void testCursor(){ //{call <procedure-name>{(<arg1>,<arg2>,...)}} String sql="{call MYPACKAGE.queryEmpList(?,?)}"; Connection conn=null; CallableStatement call=null, ResultSet rs=null; try{ conn=JDBCUtils.getConnection(); //获取数据库的连接 call=conn.prepareCall(aql); //创建statement call.setInt(1,10); //对于in参数,赋值,对于out参数,声明 call.registerOutParameter(2, OracleType.CURSOR); call.execute(); rs=((OracleCallableStatement)call).getCursor(2);//取出gaibumenzhong所有员工的信息 while(rs.next()){//取出该员工的姓名、薪水和职位 int empno=rs.getInt("empno"); String name=rs.getString("ename"); double salary=rs.getDouble("sal"); String job=rs.getString("empjob"); System.out.println(empno+"\t"+name+"\t"+salary+"\t"+job); } }catch(Exception e){e.printStackTrace();}finally{JDBCUtils.release(conn,call,rs);} } }查看全部
-
包头: CREATE OR REPLACE PACKAGE MYPACKAGE AS type empcursor is ref cursor; procedure queryEmpList(dno in number,empList out empcursor); END MYPACKAGE; 包体(需要实现包头中声明的所有方法,包括存储函数、存储方法): CREATE OR REPLACE PACKAGE BODY MYPACKAGE AS procedure queryEmpList(dno in number,empList out empcursor) AS BEGIN open empList for select * from emp where deptno=dno; END queryEmpList; END MYPACKAGE; -- 使用desc查看程序包的结构 desc MYPACKAGE查看全部
-
public class TestFunction{ /* create or replace function queryempincome(eno in number) return number */ @Test public void testFunction(){ //{?=call <procedure-name>[(<arg1>,<arg2>,...)]} String sql="{?=call queryempincome(?)}"; Connection conn=null; CallableStatement call=null; try{ // 得到数据库连接 conn=JDBCUtils.getConnection(); // 基于连接创建statement call=conn.prepareCall(sql); // 对于输入参数,需要赋值对于输出参数,需要申明 call.registerOutParameter(1, OracleTypes.NUMBER); call.setInt(2, 7839); // 执行调用 call.execute(); // 取出年收入的结果 double income=call.getDouble(1); System.out.println("该员工的年收入是:"+income); }catch(Exception e){ e.printStackTrace(); }finally{ JDBCUtils.release(conn,call,null); } } }查看全部
-
public void testProcedure(){ //{call <procedure-name>[(<arg1>,<arg2>,...)]} String sql="call queryempinform(?,?,?,?)"; Connection conn=null; CallableStatement call=null; try{ // 得到一个连接 conn=JDBCUtils.getConnection(); // 通过连接创建出statement call=conn.prepareCall(sql); // 对于in参数,需赋值,对于out参数,需要申明 call.setInt(1, 7839); // 设置第一个?为 7839 call.registerOutParameter(2, OracleTypes.VARCHAR); 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(); }finally{ JDBCUtils.release(conn,call,null); } }查看全部
-
// 释放数据库的资源 public static void release(Connection conn,Statement st,ResultSet rs){ if(rs != null){try{ rs.close();}catch(SQLException e){e.printStackTrace();}finally{rs=null;}} if(st != null){try{st.close();}catch(SQLException e){e.printStackTrace();}finally{st=null;}} if(conn != null){try{conn.close();}catch(SQLException e){e.printStackTrace();}finally{conn=null;}} } }查看全部
-
public class JDBCUtile{ private static String driver="orable.jdbc.OracleDriver"; private static String url="jdbc:oracle:thin:@192.168.56.101:1521:orcl"; private static String user="scott"; private static String password="tiger"; // 注册数据库的驱动 static{ try{ Class.forName(driver); // --> DriverManager.registerDriver(driver); }catch(ClassNotFoundException e){ throw new ExceptionInInitializerError(e); } } // 获取数据库连接 public static Connection getConnection(){ try{ return DriverManager.getConnection(url,user,password); }catch(SQLException e){e.printStackTrace(); } return null; }查看全部
-
-- out参数:查询某个员工姓名、月薪和职位 -- 原则: 如果只有一个返回值,用存储函数;否则,就用存储过程。 create or replace procedure queryempinfor(eno in number,pename out varchar2, psal out number,pjob out varchar2) as begin -- 得到该员工的姓名、月薪和职位 select ename,sal,empjob into pename,psal,pjob from emp where empno=eno; end; /查看全部
-
-- 创建一个带参数的存储过程 -- 给指定的员工涨100块钱的工资,并且打印涨前后涨后的薪水 create or replace procedure raisesalary(eno in number) -- in 这是一个输入参数 as -- 定义一个变量保存涨前的薪水 psal emp.sal%type; begin -- 得到员工涨前的薪水 select sal into psal from emp where empno=eno; -- 给该员工涨100块钱 update emp set sal=sal+100 where empno=eno; -- 一般,这里不需要 commit ! 也不需要 rollback -- 注意:一般不在存储过程或者存储函数中,commit 和 rollback -- 打印 dbms_output.put_line('涨前:'||psal||',涨后:'||(psal+100)); end; / -- 调用: begin raisesalary(7839); raisesalary(7566); end; /查看全部
-
-- 第一个存储过程:打印Hello Word create or replace procedure sayhelloword as -- 说明部分,as一定要写 begin dbms_output.put_line('Hello World'); end; / set serveroutput on -- 调用存储过程 1. exec sayhelloworld(); 2. begin sayhelloworld(); sayhelloworld(); end; /查看全部
-
创建存储过程 以HELLO WORLD为例 creat (or repalce) procedure sayhelloworld //创建过程名 as //as后为过程的说明部分,即为过程内操作语句 begin dbms_output.put_line('HELLO WORLD!'); end; //过程结束 调用时使用exec在声明部分调用查看全部
-
不需要 execute immediate?查看全部
-
不需要execute immediate?查看全部
-
in,out参数声明查看全部
-
在java中访问oracle数据库包下的存储过程2查看全部
-
在java中访问oracle数据库包下的存储过程1查看全部
举报
0/150
提交
取消