JDBC从一开始就支持存储过程的访问,也支持多个RESULTSET
调用execue执行后,可调用getMoreResults()来判断有没有返回结果集,如果有则调用getResultSet() 返回一个结果集,JDBC和JDBC2都需要相应的支持,如果你没有相应的
Driver也没用仅供参考
调用execue执行后,可调用getMoreResults()来判断有没有返回结果集,如果有则调用getResultSet() 返回一个结果集,JDBC和JDBC2都需要相应的支持,如果你没有相应的
Driver也没用仅供参考
请问jdbc thin 哪些类型不支持?
我想问 上面的存储过程返回的不是cursor, 而是表类型.
这一点我很糊涂!用什么方法取得表类型.
ASP里面,返回多个cursor是可以的.
jdbc 里的多个cursor methods execute, getMoreResults, getResultSet,
我也知道.不过似乎还是很糊涂!
讲清楚点好吗?
再道一声谢了!
以下例子在oracle8.05调试通过/*
* This sample shows how to call PL/SQL blocks from JDBC.
*/import java.sql.*;class PLSQL
{
public static void main (String args [])
throws SQLException, ClassNotFoundException
{
// Load the driver
Connection conn = null;
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
try
{
conn = DriverManager.getConnection ("jdbc:oracle:thin:@myserver:1521:test", "system", "manager");
}
catch(Exception e)
{
e.printStackTrace(System.out);
} // Create the stored procedures
init (conn); // Cleanup the plsqltest database
Statement stmt = conn.createStatement ();
stmt.execute ("delete from plsqltest");
// Call a procedure with no parameters
{
CallableStatement procnone = conn.prepareCall ("begin procnone; end;");
procnone.execute ();
dumpTestTable (conn);
} // Call a procedure with an IN parameter
{
CallableStatement procin = conn.prepareCall ("begin procin (?); end;");
procin.setString (1, "testing");
procin.execute ();
dumpTestTable (conn);
} // Call a procedure with an OUT parameter
{
CallableStatement procout = conn.prepareCall ("begin procout (?); end;");
procout.registerOutParameter (1, Types.CHAR);
procout.execute ();
System.out.println ("Out argument is: " + procout.getString (1));
}
// Call a procedure with an IN/OUT prameter
{
CallableStatement procinout = conn.prepareCall ("begin procinout (?); end;");
procinout.registerOutParameter (1, Types.VARCHAR);
procinout.setString (1, "testing");
procinout.execute ();
dumpTestTable (conn);
System.out.println ("Out argument is: " + procinout.getString (1));
} // Call a function with no parameters
{
CallableStatement funcnone = conn.prepareCall ("begin ? := funcnone; end;");
funcnone.registerOutParameter (1, Types.CHAR);
funcnone.execute ();
System.out.println ("Return value is: " + funcnone.getString (1));
} // Call a function with an IN parameter
{
CallableStatement funcin = conn.prepareCall ("begin ? := funcin (?); end;");
funcin.registerOutParameter (1, Types.CHAR);
funcin.setString (2, "testing");
funcin.execute ();
System.out.println ("Return value is: " + funcin.getString (1));
} // Call a function with an OUT parameter
{
CallableStatement funcout = conn.prepareCall ("begin ? := funcout (?); end;");
funcout.registerOutParameter (1, Types.CHAR);
funcout.registerOutParameter (2, Types.CHAR);
funcout.execute ();
System.out.println ("Return value is: " + funcout.getString (1));
System.out.println ("Out argument is: " + funcout.getString (2));
}
} // Utility function to dump the contents of the PLSQLTEST table and
// clear it
static void dumpTestTable (Connection conn)
throws SQLException
{
Statement stmt = conn.createStatement ();
ResultSet rset = stmt.executeQuery ("select * from plsqltest");
while (rset.next ())
System.out.println (rset.getString (1));
stmt.execute ("delete from plsqltest");
} // Utility function to create the stored procedures
static void init (Connection conn)
throws SQLException
{
Statement stmt = conn.createStatement ();
try { stmt.execute ("drop table plsqltest"); } catch (SQLException e) { }
stmt.execute ("create table plsqltest (x char(20))");
stmt.execute ("create or replace procedure procnone is begin insert into plsqltest values ('testing'); end;");
stmt.execute ("create or replace procedure procin (y char) is begin insert into plsqltest values (y); end;");
stmt.execute ("create or replace procedure procout (y out char) is begin y := 'tested'; end;");
stmt.execute ("create or replace procedure procinout (y in out varchar) is begin insert into plsqltest values (y); y := 'tested'; end;"); stmt.execute ("create or replace function funcnone return char is begin return 'tested'; end;");
stmt.execute ("create or replace function funcin (y char) return char is begin return y || y; end;");
stmt.execute ("create or replace function funcout (y out char) return char is begin y := 'tested'; return 'returned'; end;");
}
}
你的例子我很久以前就已经通过了.
我的问题似乎不是这样的!你的热情帮助我很感谢!
或者哪位朋友再不嫌麻烦帮帮我?!
请再看一下我的code,好吗 ? 谢谢啦!!
PLS-00306: wrong number or types of arguments in call to 'GET_TITLE_LIST'
store procedure GET_TITLE_LIST的返回参数为
get_title_list(pi_search_term IN VARCHAR2, pi_partner_id IN VARCHAR2,
po_pub_id OUT tbl_pub_id,po_publication_name OUT tbl_publication_name,
po_series_root_url OUT tbl_series_root_url, po_series_name OUT
tbl_series_name, po_series_id OUT tbl_series_id, po_ISBN OUT tbl_ISBN)
输入参数很好办:SetString就可以啦,出参数如果是VARCHAR,或,其他的简单类型也好办.
但是, tbl_publication_name之类的类型怎么办??
不过, 还是要感谢斑竹同志 !