无法在Snowflake存储过程中设置参数默认值为NULL的技术咨询
Snowflake Python存储过程参数默认值NULL设置方案
在Snowflake中创建Python存储过程时,直接在参数定义里写DEFAULT NULL会触发语法错误,这是由于Snowflake对Python存储过程的参数默认值语法有特定限制。以下是两种可行的解决方式:
方式一:在Python代码内部处理默认值
不在参数定义中指定默认值,而是在过程的Python逻辑里判断并设置NULL默认值:
CREATE OR REPLACE PROCEDURE MY_PROCEDURE( TABLE_SCHEMAS STRING, TABLE_NAMES STRING, TIMESTAMP_STRING STRING ) RETURNS STRING LANGUAGE PYTHON EXECUTE AS CALLER AS $$ # 处理参数默认值为NULL table_schemas = TABLE_SCHEMAS if TABLE_SCHEMAS is not None else None table_names = TABLE_NAMES if TABLE_NAMES is not None else None # 此处编写你的业务逻辑代码 ... $$
调用时可省略前两个参数,Snowflake会自动传入NULL:
CALL MY_PROCEDURE(TIMESTAMP_STRING => '2024-05-20');
方式二:用空字符串作为默认值,在代码中转成NULL
如果需要在参数定义里显式声明默认值,可以将默认值设为空字符串,再在Python代码里转换为NULL:
CREATE OR REPLACE PROCEDURE MY_PROCEDURE( TABLE_SCHEMAS STRING DEFAULT '', TABLE_NAMES STRING DEFAULT '', TIMESTAMP_STRING STRING ) RETURNS STRING LANGUAGE PYTHON EXECUTE AS CALLER AS $$ # 将空字符串转为NULL table_schemas = None if TABLE_SCHEMAS == '' else TABLE_SCHEMAS table_names = None if TABLE_NAMES == '' else TABLE_NAMES # 此处编写你的业务逻辑代码 ... $$
内容的提问来源于stack exchange,提问作者My80
相关产品推荐
相关产品推荐

