2012-11-16 25 views
1

我創建DB2(版本6.01)這樣一個功能:無法調用與CHAR參數上DB2用戶定義的函數我

CREATE FUNCTION myschema.test_c_c(param CHAR(1)) RETURNS CHAR(1) RETURN param; 

,並得到一個succses消息「的System i導航」告訴我該功能在myschema下。但是,當我嘗試調用這個函數是這樣的:

SELECT myschema.test_c_c('X') FROM SYSIBM.SYSDUMMY1; 

我得到以下信息:

[SQL0204] TEST_C_C der Art *N in myschema nicht gefunden. 
[SQL State=42704, DB Errorcode=-204] 

「nicht gefunden」 等於 「未找到」。

的錯誤代碼解釋-204(它的一部分,full error code Description here

「由名稱標識的對象未在DB2®子系統定義。」

,最後,用INT參數一切工作正常:

CREATE FUNCTION myschema.test_i_ri(param INT) RETURNS INT RETURN param; 
SELECT myschema.test_i_ri(4711) FROM SYSIBM.SYSDUMMY1; 
CREATE FUNCTION myschema.test_ii_ri(param1 INT, param2 INT) RETURNS INT RETURN param1 +param2; 
SELECT myschema.test_ii_ri(800, 15) FROM SYSIBM.SYSDUMMY1; 

如果我錯過了點?

我執行與SQL Workbench/J所有statmentens(我覺得這非常有用)

回答

4

嘗試錯誤和研究小時後我問這個問題,然後在30分鐘後我自己發現的answere。

問題是DB2中重載函數的解決方案。當調用

SELECT myschema.test_c_c('X') FROM SYSIBM.SYSDUMMY1; 

這種方式,DB2解釋 'X' 爲VARCHAR,但我沒有版本test_c_c與VARCHAR PARAMS。什麼工作是

SELECT CESDTA.TEST_C_C(CAST('X' AS CHAR(1))) FROM SYSIBM.SYSDUMMY1; 

或聲明VARCHAR功能:

CREATE FUNCTION cesdta.test_v_v(param VARCHAR(1)) RETURNS VARCHAR(1000) RETURN param; 
SELECT cesdta.test_v_v('X') FROM SYSIBM.SYSDUMMY1; 
+2

個人而言,如果我已經宣佈國家進入「規範」的版本(即'CHAR'接受一個),我會只需讓其他版本進行投射/轉換,並將其轉換爲原始投射。然而,你已經找到了它 - 當你有能力時,繼續並接受你自己的答案。 –