Re: jdbc + CallableStatement +Incorrectly registered parameters
- From: Joe Weinstein <joeNOSPAM@xxxxxxx>
- Date: Sun, 28 Aug 2005 10:22:11 -0700
Here's code that works. It uses a procedure rather than a function. Joe Weinstein at BEA
Statement st = c.createStatement();
st.executeUpdate (
" CREATE OR REPLACE PROCEDURE joeproc( "
+ " data_list IN OUT REF CURSOR)"
+ " IS "
+ " BEGIN "
+ " OPEN data_list FOR "
+ " SELECT * FROM DUAL; "
+ " END joeproc; "
); CallableStatement cs = c.prepareCall("{ call joeproc(?)}"); cs.registerOutParameter(1,OracleTypes.CURSOR);
cs.execute();
ResultSet rs = (ResultSet)(cs.getObject(4));piernik wrote:
Hello I'm trying to learn how to work with stored procedures in Oracle and java. I deal fine with ResultSets and PreparedStatement now I want to use functions and CallableStatement. I wrote my code looking at this sites:
http://andrej.racchvs.com/archives/2003/10/29/using-oracle-ref-cursors-in-java/ http://www.samspublishing.com/articles/article.asp?p=26251&seqNum=7 http://www.cs.bris.ac.uk/maintain/OracleDocs/java.816/a81354/samapp2.htm http://www.enterprisedt.com/publications/oracle/result_set.html
I've created a package with a function to find buss connection between 2 cities
CREATE OR REPLACE PACKAGE cursors_pkg
AS type dire_city_curs is record (
bus_id Bus_Schedule.bus_id%TYPE,
station_name Station.station_name%TYPE, arrival_tim Bus_Schedule.arrival_time%TYPE,
departure_time Bus_Schedule.departure_time%TYPE,
station_nr Bus_Schedule.station_nr%TYPE);
TYPE refcursortype IS REF CURSOR return dire_city_curs;
FUNCTION getdirect(from_city varchar2, to_city varchar2) RETURN refcursortype;
END cursors_pkg;
CREATE OR REPLACE PACKAGE BODY cursors_pkg IS
FUNCTION getdirect(from_city varchar2, to_city varchar2) RETURN refcursortype
IS
mycursor refcursortype;
BEGIN
OPEN kurszor FOR
select **bla bla** RETURN mycursor;
END;
END cursors_pkg;
now java
String usersSql = "{ call ? = cursors_pkg.getdirect(?,?) }";
CallableStatement stmt = db.prepareCall(usersSql);
stmt.registerOutParameter(1,OracleTypes.CURSOR);
stmt.setString(new String("from_city"),"London"); stmt.setString(new String("to_city"),"Paris");
stmt.execute();
ResultSet rset = (ResultSet) stmt.getObject(1);
//or ResultSet rset = ((OracleCallableStatement)stmt).getCursor (1);
while (rset.next()){ System.out.println( rset.getDouble(1) +" "+ rset.getString(2));
}
and the effect of my efforts:
SQLException: Incorrectly set or registered parameters.:null I'm puzzled. I don't understand what goes wrong. Can you give me any hints?
I was sent to
http://www.oracle.com/technology/tech/java/sqlj_jdbc/htdocs/jdbc_faq.htm
but I find there nothing interesting.
thank you for help
.
- References:
- Prev by Date: jdbc + CallableStatement +Incorrectly registered parameters
- Next by Date: Time spent by DB for a particular query
- Previous by thread: jdbc + CallableStatement +Incorrectly registered parameters
- Next by thread: Re: jdbc + CallableStatement +Incorrectly registered parameters
- Index(es):