我被要求在我们的 Mainframe 环境中构建一个用户定义的函数,用于检查较长字符串中的搜索字符串。唯一的问题是,如果我们在“ABCAADAA”中搜索“AA”,唯一有效的结果是最后一个 AA,因为第一个 AA 实际上分为 CA 和 AD。
CREATE FUNCTION F#CRE#WK (WK CHAR(02), WKATTR CHAR(10))
RETURNS INTEGER
LANGUAGE SQL
READS SQL DATA
BEGIN
DECLARE INDEX INTEGER DEFAULT 1;
WHILE (INDEX < 9) DO
SET INDEX = LOCATE_IN_STRING(WKATTR, WK, INDEX);
IF (MOD(INDEX, 2) <> 0) THEN
RETURN 1;
END IF;
END WHILE;
RETURN 0;
END;
当我使用 Data Studio 实现它时它工作正常,但如果我将它直接放到主机上(我们使用的是 Quick32770),我会遇到一堆根本没有意义的错误。我找不到任何有用的资源(当然搜索了整个 IBM 页面和 Google)。
我得到的第一个错误是:
SQLCODE = -104, ERROR: ILLEGAL SYMBOL "<END-OF-STATEMENT>". SOME
SYMBOLS THAT MIGHT BE LEGAL ARE: ;
这指的是我声明我的索引变量的行。如果我删除分号,它会告诉我 SET 在那里是非法的,因为它需要一个分号。我想不出还有什么可以尝试的(我经常弄乱代码,但错误越来越奇怪。)。几周前我在上大学的时候就开始在这个领域工作,这里没有人对此有实际的了解,所以我希望在这里能找到一些帮助。如果您还有其他需要,请告诉我!
提前致谢。