雪花医生说 存储过程允许返回值,但不要求返回值。
但在语法上 RETURNS 是强制性的。
CREATE [ OR REPLACE ] PROCEDURE <name> ( [ <arg_name> <arg_data_type> ] [ , ... ] )
RETURNS <result_data_type> [ NOT NULL ]
LANGUAGE JAVASCRIPT
[ { CALLED ON NULL INPUT | { RETURNS NULL ON NULL INPUT | STRICT } } ]
[ VOLATILE | IMMUTABLE ]
[ COMMENT = '<string_literal>' ]
[ EXECUTE AS { CALLER | OWNER } ]
AS '<procedure_definition>'
有人能解释一下我们如何创建一个过程而不从中返回值吗?或者必须从过程中返回一个值?
答案 0 :(得分:3)
根据该语法,它是强制性的。但是您的返回值可以只是静态 varchar 而不是来自您的查询结果。如果您的过程没有返回任何内容,甚至是 NULL。
例如像这样(返回NULL)
CREATE OR REPLACE PROCEDURE testproc()
RETURNS varchar
LANGUAGE JAVASCRIPT AS
'var sqlcommand =
`INSERT INTO foo (bar) VALUES (999);`
snowflake.execute({sqlText: sqlcommand});
';
但最好添加一些错误处理并返回成功/失败消息,如下所示:
CREATE OR REPLACE PROCEDURE testproc()
RETURNS varchar
LANGUAGE JAVASCRIPT AS
'var sqlcommand =
`INSERT INTO foo (bar) VALUES (999);`
try {
snowflake.execute({sqlText: sqlcommand});
return "Success";
}
catch(err) {
return "Failed: "+ err;
}
';