db-derby-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Dudgeon <tdudg...@informaticsmatters.com>
Subject Re: varargs with functions
Date Thu, 19 Dec 2013 13:25:20 GMT


Mmmmmm, I was really needing to do this without having to load my own 
Java classes as that isn't practical in my case.

To,

On 19/12/2013 13:20, Knut Anders Hatlen wrote:
> Tim Dudgeon <tdudgeon-jNDFPZUTrfSltj2lJ5oNTVjMPmZJtkid@public.gmane.org> writes:
>
>> I'm struggling with getting a function working that uses a Java static
>> method that uses varargs.
>> I understand this should work with 10.10.1.1?
>>
>> I create function like this:
>>
>> CREATE FUNCTION FORMAT_CPD_CODE
>> ( FORMAT VARCHAR(100), VAL INT ... )
>> RETURNS VARCHAR(20)
>> PARAMETER STYLE DERBY
>> NO SQL LANGUAGE JAVA
>> EXTERNAL NAME 'java.lang.String.format'
>>
>> and use it like this:
>>
>> values(FORMAT_CPD_CODE('XYZ%08d', 123))
>>
>>
>> But I get error:
>>
>> java.sql.SQLSyntaxErrorException: No method was found that matched the
>> method call java.lang.String.format(java.lang.String, int...), 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.
>>
>> Any suggestions on how to get this working?
>
> Hi Tim,
>
> Derby's method resolution currently requires the types in the signature
> to match exactly. That is, it doesn't accept Object for an INT
> parameter; it has to be int or java.lang.Integer. I think it should work
> if you create a thin wrapper method around String.format() with the
> correct signature. Something like this:
>
>      public static String format(String format, Integer... args) {
>          return String.format(format, (Object[]) args);
>      }
>
> And then point to the wrapper method in the CREATE FUNCTION call.
>
> Hope this helps,
>



Mime
View raw message