Чувствительность к регистру в DB2/400 UDF?

Я пишу оболочку SQL для процедуры сервисной программы. Процедура работает, но пользовательская функция, которую я создаю, ведет себя странно. Когда я создаю UDF с ключевым словом внешнего имени, оно становится чувствительным к регистру. Вот код, который у меня есть:

create function C1ANEWF.getSalesAuditStorePeriodLibrary
                   (inStore decimal(5,0),
                    inDate  date)
returns char(10) ccsid 37

language rpgle
parameter style general
specific sa1802f001
not deterministic
reads sql data
returns null on null input
not fenced
program type sub
no final call
allow parallel
no scratchpad
external name C1NEWO.SA1802("getSalesAuditStorePeriodLibrary")

Когда я создаю это, это работает. Если я уберу "" из имени процедуры, это не так. У меня много пользовательских функций SQL, в которых я не использую "", и чувствительность к регистру не является проблемой.

Любые идеи?


person jgriffin    schedule 16.10.2013    source источник
comment
Спасибо. Мое предположение состояло в том, что RPG всегда была нечувствительна к регистру. Глядя на сервисную программу, EXTPROC был определен с использованием кавычек, что делает его чувствительным к регистру.   -  person jgriffin    schedule 17.10.2013


Ответы (2)


Отобразите экспорт процедур вашей сервисной программы с помощью DSPSRVPGM ____ DETAIL(*PROCEXP). Вы увидите, что имя процедуры имеет смешанный регистр. Теперь посмотрите на одну из ваших старых сервисных программ. Вы увидите имена в верхнем регистре.

Кавычки вашего SQL гарантируют, что используется смешанный регистр, и, таким образом, соответствуют имени процедуры, которое чувствительно к регистру. Без этих кавычек имя было бы переведено в верхний регистр, что соответствовало бы вашим старым процедурам.

person WarrenT    schedule 16.10.2013

Заключение имени подпроцедуры в кавычки указывает DB2 использовать имя именно в кавычках, то есть в смешанном регистре. Если ваш вызов этой процедуры работает только тогда, когда вы регистрируете функцию в смешанном регистре, кажется, что ваш вызов также должен использовать смешанный регистр. Использует ли оператор вызова двойные кавычки? Если это так, удалите их и там.

person Buck Calabro    schedule 16.10.2013