簡體   English   中英

DB2 11.0上的UDF

[英]UDF on DB2 11.0

我被要求在我們的大型機環境中構建用戶定義的函數,該函數檢查較長字符串中的搜索字符串。 唯一的問題是,如果我們在“ 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在那兒是非法的,因為它期望使用分號。 我想不出什么我可以嘗試的方法(我經常弄亂代碼,但是錯誤只會變得越來越怪異。)。 幾周前我剛上大學時就開始在這個領域工作,這里沒有人對此有實際了解,所以我希望在這里找到一些幫助。 如果您還有其他需要,請告訴我!

提前致謝。

這可能對您有幫助: https : //bytes.com/topic/db2/answers/754686-db2-udf-need-eliminate-if-statement

它說在UDF的大型機上不允許使用if語句? 因此,該用戶可以將其轉向CASE功能。

為了解決此問題,您需要進入SPUFI設置並將TERMINATOR選項更改為除分號以外的其他內容。 如果將其更改為&,則我的代碼必須如下所示:

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&

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM