对存储过程 函数 包的一些学习!
这些都是以前学生时代的时候写的一个工具类JDBCutil.
package com.*****.Oracle;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import oracle.jdbc.pool.OracleDataSource;
/**
* @author YangJing
*
*/
publicclass JDBCutil {
//第一种获取oracle数据库连接 [写了两种获取数据库连接的方式]
publicstatic Connection getConnection(){
Connection conn = null;
try {
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//第二种获取oracle数据库连接
publicstatic Connection getConnectiontoo(){
Connection conn = null;
try {
OracleDataSource ods = new OracleDataSource();
String url = "jdbc:oracle:thin:@//127.0.0.1:1521/orcl";
ods.setURL(url);
ods.setUser("scott");
ods.setPassword("tiger");
conn = ods.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//该操作都是对scott用户下的emp表进行的操作
publicstaticvoid main(String[] args) {
ResultSet rs = null;
Connection conn = JDBCutil.getConnection();
//执行查询
try {
CallableStatement cs = conn.prepareCall(" Select * from emp where empno = 7788");
rs = cs.executeQuery();
while(rs.next()){
System.out.println(rs.getString("empno"));
System.out.println(rs.getString("ename"));
}
} catch (SQLException e) {
e.printStackTrace();
}
//执行插入
try {
CallableStatement cs = conn.prepareCall(" insert into emp(empno) values(7700)");
cs.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
//执行更新
try {
CallableStatement cs = conn.prepareCall(" update emp set sal = sal +100");
cs.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
//执行删除
try {
CallableStatement cs = conn.prepareCall(" delete from emp where empno = 7700");
cs.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
//对包中的一个函数print_str_pkg.func_hello进行的操作:最终的输出结果为 Hello YangJing
try {
CallableStatement cs1 = conn.prepareCall("begin ? := print_str_pkg.func_hello(?); end;");
cs1.registerOutParameter(1, Types.CHAR);
cs1.setString(2, "YangJing");
cs1.executeUpdate();
String result = cs1.getString(1);
System.out.println(result);
} catch (SQLException e) {
e.printStackTrace();
}
//执行的一个存储过程proc_test_001 这个存储过程是一个1到100的和
try {
CallableStatement cs1 = conn.prepareCall("begin proc_test_001(?); end;");
cs1.registerOutParameter(1, Types.CHAR);
cs1.executeUpdate();
int result = cs1.getInt(1);
System.out.println(result);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
下面是JDBCutil类中用到的存储过程和函数以及包
包 print_str_pkg
包中包含了一个函数func_hello以及一个存储过程proc_hello
--包 print_str_pkg
--包头
create or replace package print_str_pkg
is
procedure proc_hello(v_name varchar2);
function func_hello(v_str varchar2) return varchar2;
end print_str_pkg;
--包体
create or replace package body print_str_pkg is
--存储过程proc_hello
procedure proc_hello(v_name varchar2) is
begin
dbms_output.put_line('Hello' || ' ' || v_name);
end proc_hello;
-- 函数 func_hello
function func_hello(v_str varchar2) return varchar2 is
begin
return 'Hello' || ' ' || v_str;
end func_hello;
begin
--测试看看三个值谁先输出
dbms_output.put_line('包是从这儿开始的!');
end print_str_pkg;
--使用包[在数据库对包的一个测试]
declare
v_str varchar2(50);
begin
--调用包中的存储过程
print_str_pkg.proc_hello('YangJing!');
--调用包中的函数
v_str := print_str_pkg.func_hello('Neil!');
dbms_output.put_line(v_str);
end;
存储过程 proc_test_001[该存储过程是进行了个1到100的累加和
--存储过程:proc_test_001
create or replace procedure proc_test_001(v_number out number) is
v_no number;
begin
v_no := 0;
for v_i in 1..100 loop
v_no := v_no + v_i;
end loop;
v_number := v_no;
end proc_test_001;
--测试对存储过程proc_test_001的调用
declare
v_number number;
begin
proc_test_001(v_number);
dbms_output.put_line(v_number);
end;
作者:杨静(YangJing)
出处: [杨静の专栏] ( http://blog.csdn.net/u012141686/article/details/24365303)