雪花 SQL 创建角色和 SQL 语句。 ,面对意外的<EOF>或意外的“END”

问题描述 投票:0回答:1

我们打算根据SF元数据动态创建角色。最好通过存储过程。

但是,我们正在努力调试并花费太多时间调查 SF 返回的错误代码。

下面的想法是简单地返回数据库中存在的所有模式的“CREATE ROLE IF NOT EXISTS”语句。角色名称基于前缀“PROD_DB_R_S_”以及相关的相应架构名称。

Execute IMMEDIATE $$
DECLARE
schemanamex VARCHAR;
rolename VARCHAR;


BEGIN
 
FOR  schemarec IN (SELECT SCHEMA_NAME FROM PROD_DB.INFORMATION_SCHEMA.SCHEMATA) DO
   schemanamex := schemarec.SCHEMA_NAME;
 
   rolename := "PROD_DB_R_S_"|| schemanamex;
 
   RETURN "CREATE ROLE IF NOT EXISTS "||rolename||";";
END;
$$
;

--> 语法错误第 16 行位于位置 0 意外的 EOF

sql stored-procedures snowflake-cloud-data-platform schema roles
1个回答
0
投票

如评论中所示,您需要一个

end for
。您还需要一个光标。两者都添加到这个工作解决方案中:

Execute IMMEDIATE $$
DECLARE
schemanamex VARCHAR;
rolename VARCHAR;


BEGIN
    LET c1 CURSOR FOR (SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA);
    FOR  schemarec IN c1 DO
       return schemarec.SCHEMA_NAME;    
       --rolename := "PROD_DB_R_S_"|| schemanamex;   
       --RETURN "CREATE ROLE IF NOT EXISTS "||rolename||";";
    END FOR;
END;
$$
;
© www.soinside.com 2019 - 2024. All rights reserved.