-- 定義存儲(chǔ)過(guò)程 create or replace procedure get_rax(salary in number,rax out number) as --需要交稅的錢 bal number; begin bal := salary - 3500; if bal<=1500 then rax := bal * 0.03 - 0; elsif bal<=4500 then rax := bal * 0.1 - 105; elsif bal<=9000 then rax := bal * 0.2 - 555; elsif bal<=35000 then rax := bal * 0.25 - 1005; elsif bal<=55000 then rax := bal * 0.3 - 2755; elsif bal<=80000 then rax := bal * 0.35 - 5505; else rax := bal * 0.45 - 13505; end if; end; / set serveroutput on; -- 調(diào)用存儲(chǔ)過(guò)程 declare sal number := &salary; rax number; begin get_rax(sal,rax); dbms_output.put_line(sal || '元工資應(yīng)該交稅' || rax || '元'); end; /
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比泉山網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式泉山網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋泉山地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。
oracle | ojdbc5.jar |
c3p0 | c3p0-0.9.1.2.jar c3p0-config.xml |
c3p0-config.xml
jdbc:oracle:thin:@127.0.0.1:1521:orcl oracle.jdbc.driver.OracleDriver scott tiger 3 6 1000
JDBCUtils.java
package com.rk.utils; import java.sql.Connection; import com.mchange.v2.c3p0.ComboPooledDataSource; public class JDBCUtils { private static ComboPooledDataSource dataSource = new ComboPooledDataSource(); public static Connection getConnection() throws Exception{ return dataSource.getConnection(); } public static void closeQuietly(AutoCloseable ac){ if(ac != null){ try { ac.close(); } catch (Exception e) { e.printStackTrace(); } } } }
CallProc.java
package com.rk.test; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.Types; import com.rk.utils.JDBCUtils; /** * 演示java-jdbc調(diào)用oracle過(guò)程 */ public class CallProc { public static void main(String[] args) throws Exception{ String sql = "{call get_rax(?,?)}"; Connection conn = JDBCUtils.getConnection(); CallableStatement cstmt = conn.prepareCall(sql); //為第一個(gè)?號(hào)設(shè)置值,從1開始 cstmt.setInt(1, 7000); //為第二個(gè)?注冊(cè)輸出類型 cstmt.registerOutParameter(2, Types.INTEGER); //執(zhí)行調(diào)用過(guò)程 cstmt.execute(); //接收過(guò)程的返回值,即第二個(gè)?號(hào) int rax = cstmt.getInt(2); //顯示 System.out.println("7000元工資應(yīng)該交稅"+rax+"元"); JDBCUtils.closeQuietly(cstmt); JDBCUtils.closeQuietly(conn); } }
--定義函數(shù) create or replace function findEmpNameAndJobAndSal(pempno in number,pjob out varchar2,psal out number) return varchar2 as pename emp.ename%type; begin select ename,job,sal into pename,pjob,psal from emp where empno = pempno; return pename; end; / --調(diào)用函數(shù) declare pename emp.ename%type; pjob emp.job%type; psal emp.sal%type; begin pename := findEmpNameAndJobAndSal(7788,pjob,psal); dbms_output.put_line('7788'||'--'||pename||'--'||pjob||'--'||psal); end; /
package com.rk.test; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.Types; import com.rk.utils.JDBCUtils; /** * 演示java-jdbc調(diào)用oracle函數(shù) */ public class CallFunc { public static void main(String[] args) throws Exception { String sql = "{? = call findEmpNameAndJobAndSal(?,?,?)}"; Connection conn = JDBCUtils.getConnection(); CallableStatement cstmt = conn.prepareCall(sql); //為第一個(gè)?注冊(cè)輸出類型 cstmt.registerOutParameter(1, Types.VARCHAR); //為第二個(gè)?注入值 cstmt.setInt(2, 7788); //為第三個(gè)?注冊(cè)輸出類型 cstmt.registerOutParameter(3, Types.VARCHAR); //為第四個(gè)?注冊(cè)輸出類型 cstmt.registerOutParameter(4, Types.INTEGER); //執(zhí)行函數(shù)調(diào)用 cstmt.execute(); //分別獲取1,3,4占位符的值 String ename = cstmt.getString(1); String job = cstmt.getString(3); int sal = cstmt.getInt(4); //顯示 System.out.println("7788--"+ename+"--"+job+"--"+sal); JDBCUtils.closeQuietly(cstmt); JDBCUtils.closeQuietly(conn); } }