问题描述
Create or replace function "CONSUMPTION"."UDF_GetCountArea" (
LOCN_CLASS varchar,LOCN_SIZE_TYPE varchar,ZONE varchar,LOCN_AISLE varchar)
Returns varchar(40) as
$$
select CASE
WHEN ZONE in('81','84') THEN 'Pallet Reserve'
WHEN ZONE = '88' AND LOCN_AISLE = '84' THEN 'Pallet Reserve'
WHEN ZONE = '85' THEN 'Case Reserve'
WHEN ZONE in('80','83') THEN 'Pallet Reserve'
WHEN ZONE = '88' AND LOCN_AISLE = '83' THEN 'Pallet Reserve'
WHEN ZONE = '86' THEN 'Case Reserve'
WHEN LOCN_CLASS ='R' AND LOCN_SIZE_TYPE IN ('BFL','AFL','HLF','FUL') THEN 'Pallet Reserve'
WHEN LOCN_CLASS ='R' AND LOCN_SIZE_TYPE IN ('CSR','ACS','X1','BCS') THEN 'Case Reserve'
WHEN LOCN_CLASS ='C' AND ZONE IN ('41','42','43') THEN 'Cart Picking'
WHEN LOCN_CLASS ='C' AND ZONE IN ('44','45','46') THEN 'Unit Picking'
WHEN LOCN_CLASS ='C' AND ZONE IN ('47','48','49') THEN 'Mod Picking'
Else '99-UNK'
End Phys_COUNT_AREA
$$
grant usage on function "CONSUMPTION"."UDF_GetCountArea"(VARCHAR,VARCHAR,VARCHAR) to APPLICATION_SNowFLAKE_QA_SC_WMS_NALC_READWRITE;
grant usage on function "CONSUMPTION"."UDF_GetCountArea"(VARCHAR,VARCHAR) to APPLICATION_SNowFLAKE_QA_SC_WMS_NALC_READ;
SHOW USER FUNCTIONS return and shows the function.
我可以测试该功能,并且可以正常工作。但是当我尝试使用以下命令列出代码时,它无法列出
select GET_DDL('FUNCTION','UDF_GetCountArea(VARCHAR,VARCHAR)');
sql编译错误:对象'UDF_GetCountScope(VARCHAR,VARCHAR,VARCHAR)'
不存在或未被授权。
还可以在某处进行设置,以允许在SF对象窗口中列出UDF和SP吗?
解决方法
创建函数时,您将函数名称用双引号引起来,因此该函数名为UDF_GetCountArea
。但是,在调用GET_DDL()函数时,您没有将名称用双引号引起来,并且在Snowflake中,所有标识符均按DEFAULT大写,因此您需要一个名为UDF_GETCOUNTAREA
的函数,但是不存在这样的功能。为了检索您创建的功能的DDL,可以使用:
select GET_DDL('FUNCTION','"UDF_GetCountArea"(VARCHAR,VARCHAR,VARCHAR)');
;
也就是说,我强烈建议您避免使用带引号的标识符,除非您绝对需要使用它们。为此,您需要删除现有功能:
DROP FUNCTION "UDF_GetCountArea"(VARCHAR,VARCHAR)
,然后以新名称重新创建函数:
CREATE OR REPLACE FUNCTION CONSUMPTION.UDF_GETCOUNTAREA (
LOCN_CLASS VARCHAR,LOCN_SIZE_TYPE VARCHAR,ZONE VARCHAR,LOCN_AISLE VARCHAR
)
RETURNS VARCHAR AS
$$
...