I am not able to use a UDF (ISNUMERIC) using the following. I tried declaring the UDF with EXTERNAL C but got
----------
42601(-491)[IBM][CLI Driver][DB2/AIX64] SQL0491N The definition of routine "CUST.ISNUMERIC" must have a RETURNS clause, and one of: the EXTERNAL clause (with other required keywords); the RETURN statement; or the SOURCE clause. LINE NUMBER=48. SQLSTATE=42601
(0.02 secs)
------
CREATE TABLE TEST ( ALPHANUMERIC VARCHAR(10) );
INSERT INTO TEST VALUES '1';
INSERT INTO TEST VALUES 'A';
INSERT INTO TEST VALUES '2';
INSERT INTO TEST VALUES 'S';
INSERT INTO TEST VALUES 'B';
MQT :
-----
CREATE TABLE TAB1 (NUM_FIELD)
AS (
SELECT
CASE WHEN CUST.ISNUMERIC( ALPHANUMERIC) = 1 THEN ' NUMERIC '
ELSE ' ALPHA '
END AS COL1
FROM TEST
)
DATA INITIALLY DEFERRED REFRESH DEFERRED
USER DEFINED FUNCTION :
-----------------------
CREATE FUNCTION ISNUMERIC
(SOURCE VARCHAR(40))
RETURNS INTEGER
RETURN CASE WHEN TRANSLATE(SOURCE,'','0123456789.-+') <> '' THEN 0
WHEN POSSTR(LTRIM(SOURCE),'-') > 1 OR POSSTR(LTRIM(SOURCE),'+') > 1 THEN 0
WHEN LENGTH(RTRIM(LTRIM(TRANSLATE(SOURCE,'','0123456789 .-+')))) > 1 THEN 0
WHEN POSSTR(LTRIM(RTRIM(TRANSLATE(SOURCE,'','-+'))),' ') > 0 THEN 0
WHEN TRANSLATE(SOURCE,'','.-+') = '' THEN 0 ELSE 1
END