Snowflake SQL存储过程中的动态SQL [英] Dynamic SQL in a Snowflake SQL Stored Procedure

查看:0
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆