我正在为服务程序过程编写一个SQL包装器。该过程有效,但我正在创建的UDF表现得很奇怪。当我使用外部名称关键字创建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 UDF,我没有使用""
,并且区分大小写不是问题。
有什么想法吗?
答案 0 :(得分:2)
将子过程名称包含在引号中会告诉DB2使用与引用完全相同的名称,即大小写混合。如果您对此过程的调用仅在以大小写混合的形式注册该函数时有效,则您的调用似乎也必须使用大小写混合。调用语句是否使用双引号?如果是这样,也将它们移除。
答案 1 :(得分:2)
使用DSPSRVPGM ____ DETAIL(*PROCEXP)
显示服务程序的过程导出。您将看到过程名称是大小写混合的。现在看看你的一个旧服务程序。您将看到大写名称。
引用SQL确保使用混合大小写,从而匹配区分大小写的过程名称。如果没有这些引号,名称将被翻译为大写,这将与您的旧程序相匹配。