Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Duplicate
-
10.1.2.1
-
None
-
Low
Description
Calling a function passing BIGINT to a method accepting Long fails with the message:
ERROR 42X50: No method was found that matched the method call derbyJavaUtils.bigintToHexString(long), tried all combinations of object and primitive types and any possible type conversion for any parameters the method call may have. The method might exist but it is not public and/or static, or the parameter types are not method invocation convertible.
The method needs to accept the primative type: long to work. BIGINT as docuemented as having a compile time type of java.lang.Long - this is why I expected the example method to work: see the Reference manual: http://db.apache.org/derby/docs/10.1/ref/rrefsqlj30435.html.
Example: define the function bigintToHexString to accept a BIGINT parameter (see below) and reference the corresponding java method bigintToHexString (shown below) that accepts a Long. Add the jarfile with the class to the DB, setup the database classpath and invoke with the query shown.
>>> Java Class:
import java.sql.*;
public class derbyJavaUtils
{
// bigintToHexString
public static String bigintToHexString(Long myBigint)
// bigintToHexString2 - this will work if used for the function
public static String bigintToHexString2(long myBigint)
}
>> COMPILE IT AND JAR IT : jar -cvf derbyJavaUtils.jar DerbyJavaUtils.class
>> Setup the function as follows in a database:
.. CALL sqlj.install_jar( 'derbyJavaUtils.jar','APP.derbyJavaUtils',0);
.. CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.database.classpath', 'APP.derbyJavaUtils');
.. CREATE FUNCTION app.bigintToHexString(hexString bigint)
RETURNS VARCHAR(16)
PARAMETER STYLE JAVA NO SQL
LANGUAGE JAVA
EXTERNAL NAME 'derbyJavaUtils.bigintToHexString'
=== One possible test query:
select 'C' || bigintToHexString2(CONGLOMERATENUMBER) || '.dat', TABLENAME, ISINDEX
from SYS.SYSCONGLOMERATES a, SYS.SYSTABLES b
where a.TABLEID = b.TABLEID
As mention in the code comments the method: bigintToHexString2 - will work if used for the function
Attachments
Issue Links
- duplicates
-
DERBY-3652 Derby does not follow the SQL Standard when trying to map SQL routines to Java methods.
- Closed
- relates to
-
DERBY-4078 Document the SQL Standard routine matching rules which Derby now supports
- Closed