Невозможно вызвать пользовательскую функцию с параметром 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;