Невозможно вызвать пользовательскую функцию с параметром CHAR в DB2 for i

Я создаю функцию в DB2 (Версия 6.01) следующим образом:

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

и получите сообщение succses, и "System i Navigator" покажет мне эту функцию в 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 (часть, полное описание ошибки здесь)

"Объект, идентифицируемый по имени, не определен в подсистеме 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;

Где я упускаю суть?

Я выполняю все statmentens с SQL Workbench / J (который я считаю очень полезным)

1 ответ

Решение

После нескольких часов проб и ошибок я задаю вопрос, а через 30 минут я сам нашел ответ.

Проблема заключается в разрешении перегруженных функций в DB2. При звонке

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

таким образом, DB2 интерпретирует 'X' как VARCHAR, но у меня нет версии test_c_c с параметрами VARCHAR. Что такое работа

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;
Другие вопросы по тегам