-
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(); //獲取數(shù)據(jù)庫(kù)的連接 call=conn.prepareCall(aql); //創(chuàng)建statement call.setInt(1,10); //對(duì)于in參數(shù),賦值,對(duì)于out參數(shù),聲明 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; 包體(需要實(shí)現(xiàn)包頭中聲明的所有方法,包括存儲(chǔ)函數(shù)、存儲(chǔ)方法): 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查看程序包的結(jié)構(gòu) 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{ // 得到數(shù)據(jù)庫(kù)連接 conn=JDBCUtils.getConnection(); // 基于連接創(chuàng)建statement call=conn.prepareCall(sql); // 對(duì)于輸入?yún)?shù),需要賦值對(duì)于輸出參數(shù),需要申明 call.registerOutParameter(1, OracleTypes.NUMBER); call.setInt(2, 7839); // 執(zhí)行調(diào)用 call.execute(); // 取出年收入的結(jié)果 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{ // 得到一個(gè)連接 conn=JDBCUtils.getConnection(); // 通過(guò)連接創(chuàng)建出statement call=conn.prepareCall(sql); // 對(duì)于in參數(shù),需賦值,對(duì)于out參數(shù),需要申明 call.setInt(1, 7839); // 設(shè)置第一個(gè)?為 7839 call.registerOutParameter(2, OracleTypes.VARCHAR); call.registerOutParameter(3, OracleTypes.NUMBER); call.registerOutParameter(4, OracleTypes.VARCHAR); // 執(zhí)行調(diào)用 call.execute(); // 取出結(jié)果 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); } }查看全部
-
// 釋放數(shù)據(jù)庫(kù)的資源 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"; // 注冊(cè)數(shù)據(jù)庫(kù)的驅(qū)動(dòng) static{ try{ Class.forName(driver); // --> DriverManager.registerDriver(driver); }catch(ClassNotFoundException e){ throw new ExceptionInInitializerError(e); } } // 獲取數(shù)據(jù)庫(kù)連接 public static Connection getConnection(){ try{ return DriverManager.getConnection(url,user,password); }catch(SQLException e){e.printStackTrace(); } return null; }查看全部
-
-- out參數(shù):查詢(xún)某個(gè)員工姓名、月薪和職位 -- 原則: 如果只有一個(gè)返回值,用存儲(chǔ)函數(shù);否則,就用存儲(chǔ)過(guò)程。 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; /查看全部
-
-- 創(chuàng)建一個(gè)帶參數(shù)的存儲(chǔ)過(guò)程 -- 給指定的員工漲100塊錢(qián)的工資,并且打印漲前后漲后的薪水 create or replace procedure raisesalary(eno in number) -- in 這是一個(gè)輸入?yún)?shù) as -- 定義一個(gè)變量保存漲前的薪水 psal emp.sal%type; begin -- 得到員工漲前的薪水 select sal into psal from emp where empno=eno; -- 給該員工漲100塊錢(qián) update emp set sal=sal+100 where empno=eno; -- 一般,這里不需要 commit ! 也不需要 rollback -- 注意:一般不在存儲(chǔ)過(guò)程或者存儲(chǔ)函數(shù)中,commit 和 rollback -- 打印 dbms_output.put_line('漲前:'||psal||',漲后:'||(psal+100)); end; / -- 調(diào)用: begin raisesalary(7839); raisesalary(7566); end; /查看全部
-
-- 第一個(gè)存儲(chǔ)過(guò)程:打印Hello Word create or replace procedure sayhelloword as -- 說(shuō)明部分,as一定要寫(xiě) begin dbms_output.put_line('Hello World'); end; / set serveroutput on -- 調(diào)用存儲(chǔ)過(guò)程 1. exec sayhelloworld(); 2. begin sayhelloworld(); sayhelloworld(); end; /查看全部
-
創(chuàng)建存儲(chǔ)過(guò)程 以HELLO WORLD為例 creat (or repalce) procedure sayhelloworld //創(chuàng)建過(guò)程名 as //as后為過(guò)程的說(shuō)明部分,即為過(guò)程內(nèi)操作語(yǔ)句 begin dbms_output.put_line('HELLO WORLD!'); end; //過(guò)程結(jié)束 調(diào)用時(shí)使用exec在聲明部分調(diào)用查看全部
-
不需要 execute immediate?查看全部
-
不需要execute immediate?查看全部
-
in,out參數(shù)聲明查看全部
-
在java中訪問(wèn)oracle數(shù)據(jù)庫(kù)包下的存儲(chǔ)過(guò)程2查看全部
-
在java中訪問(wèn)oracle數(shù)據(jù)庫(kù)包下的存儲(chǔ)過(guò)程1查看全部
舉報(bào)
0/150
提交
取消