我正在尝试创建一个 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''));
如何在调用函数期间处理引号。提前感谢您的帮助
答案 0 :(得分:0)
我想强调 Felipe 的回答。 JavaScript UDTF 不支持“存储过程 API”。
https://docs.snowflake.com/en/sql-reference/stored-procedures-api.html
因此您无法在 JavaScript UDTF 中创建和运行动态 SQL。它必须具有“processRow”回调函数来处理作为参数传入的值并将它们作为行返回。
https://docs.snowflake.com/en/sql-reference/udf-js-table-functions.html#basic-hello-world-examples
您可以创建一个存储过程来运行动态 SQL 并将结果作为数组/json 返回,但它不会生效。
对于您原来的问题,您只需要通过重复或使用斜杠来转义引号:
call FUNCTION_NAME('WHERE i=''1''');
call FUNCTION_NAME('WHERE i=\'1\'');