雪花 SQL 存储过程中的动态 SQL

Dynamic SQL in a Snowflake SQL Stored Procedure

我想 运行 使用动态 SQL 在 Snowflake SQL 存储过程(不是 Javascript)中进行 select 查询。这可能吗?

我想要做的是传入一个数据库名称作为参数。然后我想 select 来自 INFORMATION_SCHEMA.SCHEMATA 的所有模式名称用于该数据库。我想使用数据库名称的输入参数值来完全限定 table。例如,DBNAME.INFORMATION_SCHEMA.SCHEMATA 其中 DBNAME 是我的输入参数的名称。

然后我想遍历结果并为每个模式做一些代码。

我找到了很多 Javascript 的动态 SQL 示例,但我找不到 SQL 存储过程(语言 SQL)的示例,因为它是如此新的。请让我知道这是否可能,如果可能的话请举个例子。谢谢!

特定数据库中的注释模式示例:

准备设置:

CREATE DATABASE TEST3;
CREATE SCHEMA TEST1;
CREATE SCHEMA TEST2;

SELECT CATALOG_NAME, SCHEMA_NAME, COMMENT
FROM TEST3.INFORMATION_SCHEMA.SCHEMATA;

程序:

CREATE OR REPLACE PROCEDURE test_proc(DB_NAME STRING)
RETURNS STRING
LANGUAGE SQL
AS
$$
DECLARE
   TABLE_NAME   STRING;
   QUERY        STRING;
   OUTPUT       STRING DEFAULT '';
   c1           CURSOR FOR SELECT SCHEMA_NAME FROM TABLE(?) 
                WHERE SCHEMA_NAME != 'INFORMATION_SCHEMA';
BEGIN
   TABLE_NAME := CONCAT(DB_NAME, '.INFORMATION_SCHEMA.SCHEMATA');
   OPEN c1 USING (TABLE_NAME);

   FOR rec IN c1 DO
       QUERY := 'COMMENT ON SCHEMA ' || DB_NAME || '.' || rec.SCHEMA_NAME
                 || ' IS ''test_comment'';';
       OUTPUT := OUTPUT || QUERY;
       EXECUTE IMMEDIATE :QUERY;
   END FOR;
   
   RETURN :OUTPUT;
END;
$$;

通话:

CALL test_proc('TEST3');

输出: