Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.misc -> Cannot call ANY stored functions from Java
Hi,
I cannot call ANY stored procedure from my Java program. All stored functions run very well in PL/SQL, but when I call them from my Java program they crush with error codes like ORA-00600.
Here is the code for one of my stored procedures which runs very well in PL/SQL:
CREATE OR REPLACE PACKAGE types AS
TYPE cursorType IS REF CURSOR;
END;
/
CREATE OR REPLACE FUNCTION list_recs (id IN NUMBER)
RETURN types.cursorType IS tracks_cursor types.cursorType;
BEGIN
OPEN tracks_cursor FOR
SELECT * FROM accounts1
WHERE id = row_number;
RETURN tracks_cursor;
END;
/
variable c refcursor
exec :c := list_recs(11)
SQL> print c
COLUMN1 A1 ROW_NUMBER
---------- ---------- ----------
rec_11 jacob 11 rec_12 jacob 11 rec_13 jacob 11 rec_14 jacob 11 rec_15 jacob 11 --------------------------------------------------------Here is my Java code:
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
class list_recs
{
public static void main(String args[]) throws SQLException,
IOException
{
String query;
CallableStatement cstmt = null;
ResultSet cursor;
// input parameters for the stored function String user_name = "jacob";
// user name and password
String user = "jnikom";
String pass = "jnikom";
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
try { Class.forName ("oracle.jdbc.driver.OracleDriver"); }
catch (ClassNotFoundException e)
{ System.out.println("Could not load driver"); }
Connection conn =
DriverManager.getConnection ( "jdbc:oracle:thin:@oracle_url:1521:bosdev",user,pass);try
String sql = "{ ? = call list_recs(?) }"; cstmt = conn.prepareCall(sql); // Use OracleTypes.CURSOR as the OUT parameter type cstmt.registerOutParameter(1, OracleTypes.CURSOR); String id = "11"; cstmt.setInt(2, Integer.parseInt(id)); // Execute the function and get the return object from the call cstmt.executeQuery(); ResultSet rset = (ResultSet) cstmt.getObject(1); while (rset.next()) { System.out.print(rset.getString(1) + " "); System.out.print(rset.getString(2) + " "); System.out.println(rset.getString(3) + " "); }
System.out.println("Could not call stored function"); e.printStackTrace(); return;
cstmt.close(); conn.close();
Here is how I run it on Win2K and using Oracle9 on Solaris:
C:\Jacob\Work\Java\Test\Vaultus\Oracle9i\FunctionReturnsResultset>java
list_recs
Could not call stored function
java.sql.SQLException: ORA-00600: internal error code, arguments:
[ttcgcshnd-1], [0], [], [], [], [], [], []
at
oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:168)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:208) at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:543) at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1405) at oracle.jdbc.ttc7.TTC7Protocol.fetch(TTC7Protocol.java:889) at oracle.jdbc.driver.OracleStatement.<init>(OracleStatement.java:490) at
at
oracle.jdbc.driver.OracleStatement.getObjectValue(OracleStatement.java:4189)
at
oracle.jdbc.driver.OracleStatement.getObjectValue(OracleStatement.java:4123)
at
oracle.jdbc.driver.OracleCallableStatement.getObject(OracleCallableStatement.java:541)
at list_recs.main(list_recs.java:42)
C:\Jacob\Work\Java\Test\Vaultus\Oracle9i\FunctionReturnsResultset>
I would appreciate any help,
Jacob Nikom Received on Wed Feb 20 2002 - 11:50:34 CST