本文介绍了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
发布评论