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中会报错,有没有好的解决办法?
参与1

0同行回答

“答”则兼济天下,请您为题主分忧!

提问者

cqzhang
系统架构师inspur
擅长领域: 数据库双活Db2 pureScale

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2015-07-20
  • 关注会员:1 人
  • 问题浏览:1810
  • X社区推广