雪花 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');
输出:
我想 运行 使用动态 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');
输出: