Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Call an Oracle function from Java

Tags:

I am having issues calling an Oracle FUNCTION (not a Stored Procedure) from Java 1.6, using ojdbc14.jar.

I do not know what the function contains as I am calling it from a remote server, all I know is this:

FUNCTION ap_ch_get_acct_balances (VAR_PI_MOB_NO_ACCT_NO VARCHAR2, VAR_REPLY_CODE OUT NUMBER, VAR_EXT_RESPONSE OUT VARCHAR2, VAR_PO_ACC_BAL OUT CHAR, VAR_PO_ACCT_NO OUT CHAR)    

The schema I need to use is: FCRLIVE.AP_CH_GET_ACCT_BALANCES

I am trying this:

String call = "{ ? = call FCRLIVE.AP_CH_GET_ACCT_BALANCES(?, ?, ?, ?, ?) }"; CallableStatement cstmt = conn.prepareCall(call); cstmt.setQueryTimeout(1800); cstmt.setString(1, inputCode); cstmt.registerOutParameter(2, oracle.jdbc.OracleTypes.NUMBER); cstmt.registerOutParameter(3, oracle.jdbc.OracleTypes.VARCHAR); cstmt.registerOutParameter(4, oracle.jdbc.OracleTypes.CHAR); cstmt.registerOutParameter(5, oracle.jdbc.OracleTypes.CHAR); cstmt.executeUpdate(); 

But I keep seeing this in the log file:

java.sql.SQLException: ORA-01006: bind variable does not exist at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)     at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)     at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:573)     at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1891)     at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1093)     at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2047)     at oracle.jdbc.driver.OracleStatement.doExecuteOther(OracleStatement.java:1940)     at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2688)     at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:589) 

Am I calling the function wrong? Or what could this possibly be?

Thanks in advance for the help!

like image 876
lulu88 Avatar asked Oct 31 '12 12:10

lulu88


People also ask

How to call SQL functions in Java?

The java.sql.CallableStatement is an interface which can be used to execute SQL FUNCTIONS in java. Example/ Full Programs JDBC- Calling Oracle database FUNCTION - CallableStatement example in java System.out.println ("Connection established successfully!"); callableStmt = con.prepareCall (" { ? = call MYFUNCTION (?)}");

How to call a function in oracle using JDBC?

First, we can simply call the Oracle function just like any other SQL query: Another approach is to call the database function using plain JDBC API: " { ? = call fn_count_comments (?) }" )) {

What are functions in Oracle Database?

Oracle functions. Oracle also supports database functions, which, unlike stored procedures, don’t use input and output parameters, but one or more function arguments and a single return value.

What is CallableStatement in Java?

The java.sql.CallableStatement is an interface which can be used to execute SQL FUNCTIONS in java. Example/ Full Programs JDBC- Calling Oracle database FUNCTION - CallableStatement example in java


1 Answers

it should be:

String call = "{ ? = call FCRLIVE.AP_CH_GET_ACCT_BALANCES(?, ?, ?, ?, ?) }"; 
like image 83
konradkg Avatar answered Sep 19 '22 13:09

konradkg