2011-09-21 28 views
3

SQL UDF java程序(字符轉換問題的)餘按照說明在http://www.itjungle.com/mpo/mpo100903-story01.html'SQLSTATE 57017' 的在iSeries

的UDF看起來像這樣

CREATE FUNCTION re_Test(input VARCHAR(500), 
           regex VARCHAR(500)) 
RETURNS INTEGER 
EXTERNAL NAME 'UDFs.re_Test' 
LANGUAGE Java 
PARAMETER STYLE Java 
FENCED 
NO SQL 
RETURNS NULL ON NULL INPUT 
SCRATCHPAD 
DETERMINISTIC 

而在UDFsthat Java方法正在叫這個樣子的

public static int re_Test(String input, 
          String regex) throws Exception { 
    // returns number of occurrences 
    Pattern pattern = Pattern.compile(regex); 
    Matcher matcher=pattern.matcher(input); 

    int noFound=0; 

    while (matcher.find()) 
     noFound++; 

    return noFound; 
    } 

如果我從SquirrelSQL

運行功能210
select re_test('abcdeab','ab') from sysibm/sysdummy1 

它工作正常,但是,如果我從AS/400 5020控制檯運行STRSQL我在作業日誌SQLSTATE 57017

我能夠通過運行CHGJOB並輸入37來解決這個問題得到這個錯誤而不是CCSID字段中的65535。

這是不可取的,因爲我每次登錄時都需要這樣做。

任何人都知道如何解決這個問題?

回答

1

您的用戶信息可能設置爲CCSID(*SYSVAL)這意味着您的工作將基於系統值QCCSID開始。

考慮將您的用戶配置文件更改爲CCSID(37)

+1

如果其他用戶使用該功能會怎麼樣?如果RPGLE程序使用該功能會怎樣?這是有點冒險的 – jax

+0

是的,好點。我在想什麼? O_O – WarrenT