我正在使用v6r1m0和Windows 7x64上的Navigator v7r1m0的旧AS / 400 DB2系统进行工作。
今天,我在此系统上创建了我的第一个UDF,但很快意识到有些东西没有按预期工作。如果删除该函数,请进行更改,然后再次创建...返回的值不会更改。好像有已编译的代码被缓存/镜像/保存在某处...即使被丢弃。
在拖放/更改/创建之后,如果我进入导航器中的模式树并生成该函数的SQL,我会执行来查看新的更改。但是该函数返回的值是来自SQL的上一个版本。
请考虑以下几行SQL,所有这些行均在Navigator SQL窗口中创建和运行。运行此命令时,将打开两个结果选项卡,但两个窗口中返回的值是相同。两个结果均为“ Y”; “ N”永远不会出现。
这是怎么回事?这个服务器/ db / connection / etc是否有问题,或者(更有可能)我是否不知道某些基本原理在起作用??
CREATE FUNCTION CERTODB.TESTME
()
RETURNS VARCHAR(1)
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
CALLED ON NULL INPUT
BEGIN
RETURN 'Y' ; -- CHANGES BELOW
END ;
SELECT CERTODB.TESTME() FROM SYSIBM.SYSDUMMY1 ; -- RETURNS 'Y'
DROP FUNCTION CERTODB.TESTME ;
CREATE FUNCTION CERTODB.TESTME
()
RETURNS VARCHAR(1)
LANGUAGE SQL
DETERMINISTIC
NO EXTERNAL ACTION
CALLED ON NULL INPUT
BEGIN
RETURN 'N' ; -- VALUE HAS BEEN CHANGED
END ;
SELECT CERTODB.TESTME() FROM SYSIBM.SYSDUMMY1 ; -- STILL RETURNS 'Y'..!!
答案 0 :(得分:0)
对我来说很好...但是我正在运行v7.2 ...
我不记得使用6.1版UDF的任何问题...
IBM i是基于对象的,因此您的两个函数被视为两个单独的对象,每个对象都有唯一的地址。它确实支持“使用时替换”,但是通常在用REPLACE(* YES)编译的HLL程序中可以看到。
您可以尝试在通话之间断开连接并重新连接。