DB2自定义函数调用问题
在迁移过程中遇到自定义函数调用的问题:CREATE OR REPLACE FUNCTION ADM."ISDATE" (str in varchar2)
return number
is
dt date;
len number(2);
begin
/* if str is null then
return 1;
end if; */
len:=length(str);
if len<>8 and len<>6 and len<>14 then
return 0;
end if;
dt:= case len when 8 then to_date(str,'yyyymmdd')
when 6 then to_date(str,'hh24miss')
when 14 then to_date(str,'yyyymmddhh24miss') end;
return 1;
exception
when others then
return 0;
end;
部署 [ODSDB]ADM.ISDATE(VARCHAR2(4096))
正在运行
ADM.ISDATE - 已开始部署。
ADM.ISDATE - 已完成创建 用户定义的函数。
ADM.ISDATE - 部署成功。
CREATE OR REPLACE PROCEDURE ADM.TEST_PROC_DB2 (IN V_INDATE VARCHAR(8), OUT VARRESULT INTEGER)
P1: BEGIN
-- #######################################################################
-- # Returns count of tables created by DPFINST1 and like VARNAME
-- #######################################################################
--SELECT COUNT(*) INTO VARRESULT FROM SYSIBM.SYSTABLES
--
WHERE CREATOR = 'DPFINST1' AND NAME LIKE VARNAME;
SELECT adm.ISDATE(V_INDATE) INTO VARRESULT
FROM SYSIBM.dual;
END P1
编译过程中报如下错误:
部署 [ODSDB]ADM.TEST_PROC_DB2(VARCHAR(8), INTEGER)
正在运行
ADM.TEST_PROC_DB2 - 已开始部署。
创建 存储过程 返回了 SQLCODE: -390, SQLSTATE: 42887。
ADM.TEST_PROC_DB2: 8: The function "ADM.ISDATE" resolved to specific function "ISDATE" that is not valid in the context where it is used.. SQLCODE=-390, SQLSTATE=42887, DRIVER=4.18.60
The function "ADM.ISDATE" resolved to specific function "ISDATE" that is not valid in the context where it is used.. SQLCODE=-390, SQLSTATE=42887, DRIVER=4.18.60
ADM.TEST_PROC_DB2 - 部署已失败。
ADM.TEST_PROC_DB2 - 已成功完成回滚。
问题:
为什么DB2中的自定义函数在存储过程中写在select中会报错,有没有好的解决办法?