参数化 DDL SQL 雪花

Parameterize DDL SQL Snowflake

在下面的代码中有什么方法可以参数化 sst 部分。

我尝试使用 concat 和 set ssourl=url, sst = $ssourl 等其他方法,但没有成功。还有许多其他方法,例如使用 concat、Identifier。

我无法参数化证书,因为它有 256 字节的限制。有什么方法可以在下面的代码中参数化 sst 。谢谢

alter account set saml_identity_provider = '{
  "cert": "XXXXXXXXXXXXXXXXXXX",
  "sst": "https://corp.com/app/<app_id>/sso/saml",
  "type"  : "test"
  "label" : "singlesignOn"
  }';

可以使用 Snowflake 脚本块来完成:

DECLARE
  CERT STRING DEFAULT 'XXXXXXXXXXXXXXXXXXX';
  SST  STRING DEFAULT 'https://corp.com/app/<app_id>/sso/saml';
  TYPE STRING DEFAULT 'test';
  
  
  SQL STRING DEFAULT $$alter account set saml_identity_provider = '{
  "cert": "<cert>",
  "sst": "<sst>",
  "type"  : "<test>"
  "label" : "singlesignOn"
  }'$$;
BEGIN
   SQL := REPLACE(:SQL, '<cert>', :CERT);
   SQL := REPLACE(:SQL, '<sst>',  :SST);
   SQL := REPLACE(:SQL, '<type>', :TYPE);
       
   EXECUTE IMMEDIATE :SQL;
   RETURN :SQL;
END;

输出:

编辑:

Using Snowflake Scripting in SnowSQL and the Classic Web Interface

EXECUTE IMMEDIATE $$

DECLARE
  CERT STRING DEFAULT 'XXXXXXXXXXXXXXXXXXX';
  SST  STRING DEFAULT 'https://corp.com/app/<app_id>/sso/saml';
  TYPE STRING DEFAULT 'test';
  
  
  SQL STRING DEFAULT 'alter account set saml_identity_provider =' || CHAR(39) || '{"cert": "<cert>",  "sst": "<sst>","type"  : "<test>"  "label" : "singlesignOn"}' || CHAR(39);
BEGIN
   SQL := REPLACE(:SQL, '<cert>', :CERT);
   SQL := REPLACE(:SQL, '<sst>',  :SST);
   SQL := REPLACE(:SQL, '<type>', :TYPE);
       
   EXECUTE IMMEDIATE :SQL;
   RETURN :SQL;
END;
$$;

输出: