我们打算根据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
如评论中所示,您需要一个
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;
$$
;