Snowflake SQL存储过程中的动态SQL [英] Dynamic SQL in a Snowflake SQL Stored Procedure
本文介绍了Snowflake SQL存储过程中的动态SQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我希望使用动态SQL在Snowflake SQL存储过程(而不是Java脚本)中运行SELECT查询。这可能吗?
我希望做的是将数据库名称作为参数传递。然后,我想为该数据库选择INFORMATION_SCHEMA.SCHEMATA
中的所有架构名称。我想使用数据库名称的输入参数值来完全限定该表。例如,DBNAME.INFORMATION_SCHEMA.SCHEMATA
其中DBNAME
是我的输入参数的名称。
然后我要遍历结果,并为每个架构编写一些代码。
我找到了许多用于Java脚本的动态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');
输出:
这篇关于Snowflake SQL存储过程中的动态SQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文