我正在尝试创建一个UDTF,其中我计划将动态where子句作为参数传递给UDTF
CREATE OR REPLACE FUNCTION FUNCTION_NAME(where_clause VARCHAR)
RETURNS TABLE ()
LANGUAGE JAVASCRIPT
AS
$$ var sql_command=SELECT COL1, COL2 FROM TABLE_1 JOIN TABLE_2 ON ....
+where_clause+ GROUP BY ...;
var stmt = snowflake.createStatement( {sqlText: sql_command} );
var resultSet = stmt.execute(); resultSet.next();
$$这是可能的吗?我还希望能够在函数调用期间处理参数中的引号
例如,如果调用是:
SELECT * FROM TABLE(FUNCTION_NAME('WHERE COL_1='value''));如何处理函数调用过程中的引号。提前感谢你的帮助
发布于 2021-03-16 20:19:27
我想强调一下Felipe的答案。JavaScript UDTF不支持“存储过程接口”。
https://docs.snowflake.com/en/sql-reference/stored-procedures-api.html
因此不能在SQL中创建和运行动态JavaScript。它必须有"processRow“回调函数来处理作为参数传入的值,并将它们作为行返回。
https://docs.snowflake.com/en/sql-reference/udf-js-table-functions.html#basic-hello-world-examples
您可以创建一个存储过程来运行动态SQL,并以array/json的形式返回结果,但这是无效的。
对于你最初的问题,你只需要通过重复或使用斜杠来转义引号:
call FUNCTION_NAME('WHERE i=''1''');
call FUNCTION_NAME('WHERE i=\'1\'');https://stackoverflow.com/questions/66650887
复制相似问题