当前位置:首页 > Java操作Oracle的基本方式总结
3、 存储过程执行
3.1 无返回值的存储过程执行
1、建立存储过程
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2)
Is
BEGIN
INSERT INTO T_TEST (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;
2、相应的JAVA程序
Package dusuzhong.Java.Oracle.Test;
import java.sql.*;
import java.io.OutputStream; import java.io.Writer;
import java.sql.PreparedStatement; import java.sql.ResultSet; import oracle.jdbc.driver.*;
public class TestProcedureOne {
public TestProcedureOne() { }
public static void main(String[] args ) {
Connection conn = null; //Statement stmt = null; //ResultSet rs = null;
//CallableStatement cstmt = null; try {
conn = new ConnOraDB.getConneciton(); CallableStatement proc = null;
//proc = conn.prepareCall(\
proc = conn.prepareCall(\
proc.setString(1, \ //参数1设置为“100”
proc.setString(2, \参数2设置为“TestOne” proc.execute(); }
catch (SQLException e) {
e.printStackTrace(); }
finally {
try {
if(rs != null) {
rs.close(); }
if(stmt!=null) {
stmt.close(); }
if(conn!=null) {
conn.close(); }
} catch(Eexeption e) { Exit(0);
} }
}
} 注:调用存储过程时,切勿在call语句的前后使用空格。 3.2 有返回值的存储过程执行
1、存储过程为
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2)
Is
BEGIN
SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
END TESTB;
2、JAVA代码
Package dusuzhong.Java.Oracle.Test;
import java.sql.*;
import java.io.OutputStream; import java.io.Writer;
import java.sql.PreparedStatement; import java.sql.ResultSet; import oracle.jdbc.driver.*;
public class TestProcedureTWO {
public TestProcedureTWO() { } public static void main(String[] args )
{
Connection conn = null; Statement stmt = null; ResultSet rs = null;
CallableStatement proc = null; try { conn = new ConnOraDB.getConnection(); proc = conn.prepareCall(\ proc.setString(1, \ proc.registerOutParameter(2, Types.VARCHAR); proc.execute(); String testPrint = proc.getString(2); System.out.println(\}
catch(SQLException ex2) { ex2.printStackTrace(); }
catch(Exception e)
{ e.printStackTrace(); }
finally {
try { If (conn != null)
{ conn.close(); } If () }
catch(Exception e) { e.printStackTrace(); } } }
} 注:这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
3.3 返回游标 1、存储过程为
CREATE OR REPLACE PACKAGE TESTPACKAGE IS
TYPE Test_CURSOR IS REF CURSOR;
procedure TESTC(cur_ref out Test_CURSOR); end TESTPACKAGE;
create or replace package body TESTPACKAGE is
procedure TESTC(cur_ref out Test_CURSOR) is begin
OPEN cur_ref FOR
SELECT * FROM T_TEST;
end TESTC;
END TESTPACKAGE;
共分享92篇相关文档