× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



That worked Chuck. I changed the second parm to a VARCHAR(1) and now it
finds the UDF. Now the UDF is failing with "Missing operational
descriptor." in the joblog. Apparently the OPDESC on my procedure is a
problem.

-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of CRPence
Sent: Thursday, September 26, 2013 3:45 PM
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: Creating a SQL UDF

On 26 Sep 2013 11:26, Robert Mullis wrote:
I have a service program (SYSRVUTL) with the following procedure in
it:

D Remove_Non_AlphaNumeric...
D pr 65535a varying opdesc
D inData 65535a const varying
D inCompress n const

I want to create a UDF to use this procedure in embedded SQL, but so
far I have been unsuccessful. I have tried numerous times creating the

function with slight variations and each time it appears to create.
But when I try and run it in an SQL Select, it comes back and tells me

the function is not found in *LIBL. I know it was created in a library

that is in my library list.

This was my last attempt at creating:

CREATE FUNCTION WORKLB/REMOVE_NON_ALPHANUMERIC ( INDATA VARCHAR(32740)

, COMPRESS CHAR(1)
) RETURNS VARCHAR(32740)
LANGUAGE RPGLE DETERMINISTIC NO SQL
RETURNS NULL ON NULL INPUT
EXTERNAL NAME 'WORKLB/SYSRVUTL(REMOVE_NON_ALPHANUMERIC)'
PARAMETER STYLE GENERAL

Anyone have any suggestions? I am sure it is simple, but this is my
first attempt at creating a UDF.

The specific message identifier was not noted, nor was the failing
invocation. Presumably a literal 1-byte character [delimited same as a]
string was specified as the second argument, and the specific error
implied that the UDF by that name _with the same\compatible parameters_
was not found in *LIBL [per an invocation that was not
library-qualified]. That is, perhaps the invocation was something
like?: REMOVE_NON_ALPHANUMERIC(COL_VARCHAR_50,'1') If so...

While the argument can be specified as CAST('1' as CHAR(1)) [instead
of the literal\constant value '1'] to avoid the error, the issue instead
can be resolved by creating an overloaded function, even while allowing
the RPG program to remain unchanged; i.e. the SQL will accept the
literal as VARCHAR for invocation of a function by that name, but that
literal will be cast to CHAR so the RPG is properly invoked by the SQL:

create function /* new UDF version allows a 1-byte char literal */
WORKLB/REMOVE_NON_ALPHANUMERIC /* same routine name as orig. */
( INDATA VARCHAR(32740) /* parm1-unchanged: same input type+len */
, COMPRESS VARCHAR(1) /* enable character constant as VARCHAR */
) RETURNS VARCHAR(32740) /* unchanged: same return data type */
specific REMOVE_NON_ALPHANUERMIC_VC1
/* optional name enables DROP by name vs by parameter typing */
source WORKLB/REMOVE_NON_ALPHANUMERIC(VARCHAR(32740), CHAR(1))
/* "source" original UDF; i.e. original parm typing\signature */

--
Regards, Chuck
--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list To post a message email: RPG400-L@xxxxxxxxxxxx To
subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives at
http://archive.midrange.com/rpg400-l.


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.