You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake多行输出存储过程:如何实现类似SQLPRINT的输出执行

如何执行Snowflake存储过程输出的多行SQL脚本?

我有一个Snowflake存储过程GET_TABLES,它会输出多行SQL脚本内容。想知道有没有类似SQLPRINT的方法,能直接执行这些输出的SQL语句?

存储过程代码如下:

create or replace procedure DIMENSIONS.DBMETA.GET_TABLES()
    returns TABLE (SQL_SCRIPT VARCHAR)
    LANGUAGE SQL
    AS
    $$
declare res RESULTSET DEFAULT (  SELECT
                            CONCAT('INSERT INTO DIMENSIONS.DBMETA.TABLES(DATABASE_ID, DB_NAME, SCHEMA_ID, DATABASE_TABLE_ID, TABLE_NAME, TABLE_CREATE_DATE, OBJECT_TYPE, CREATE_BY_USER_ID) ','SELECT DB.DATABASE_ID,DB.SERVER_ID,DB.DATABASE_NAME,SCH.SCHEMA_ID,ISC.TABLE_NAME,ISC.CREATED,ISC.TABLE_TYPE,999 AS CREATE_BY_USER_ID FROM ',DB.DATABASE_NAME,'.','INFORMATION_SCHEMA.TABLES ISC ' ,
                            ' JOIN DIMENSIONS.DBMETA.DATABASES DB ON ISC.TABLE_CATALOG = DB.DATABASE_NAME AND DB.SERVER_ID = 320'
                                ,'JOIN DIMENSIONS.DBMETA.SCHEMAS SCH ON ISC.TABLE_SCHEMA = SCH.SCHEMA_NAME AND DB.DATABASE_ID = SCH.DATABASE_ID'
                            , ' LEFT JOIN DIMENSIONS.DBMETA.VW_TABLES SC '
                            ,'ON ISC.TABLE_CATALOG = SC.DATABASE_NAME AND ISC.TABLE_SCHEMA = SC.SCHEMA_NAME AND SC.SERVER_ID = DB.SERVER_ID  AND SC.TABLE_NAME = ISC.TABLE_NAME'
                            ,' WHERE SC.TABLE_NAME IS NULL') AS SQL_SCRIPT
  FROM DIMENSIONS.DBMETA.DATABASES DB
  WHERE DB.SERVER_ID = 320);
BEGIN
    RETURN TABLE (res);
END;
$$

解决方案

方法1:通过存储过程自动循环执行

新建一个存储过程,调用GET_TABLES获取SQL脚本后逐行执行:

create or replace procedure DIMENSIONS.DBMETA.EXECUTE_GET_TABLES_SQL()
returns VARCHAR
LANGUAGE SQL
AS
$$
DECLARE
    cur CURSOR FOR SELECT SQL_SCRIPT FROM TABLE(DIMENSIONS.DBMETA.GET_TABLES());
    sql_stmt VARCHAR;
BEGIN
    FOR record IN cur DO
        sql_stmt := record.SQL_SCRIPT;
        EXECUTE IMMEDIATE sql_stmt;
    END FOR;
    RETURN '所有SQL脚本执行完成';
END;
$$

执行调用:

CALL DIMENSIONS.DBMETA.EXECUTE_GET_TABLES_SQL();

方法2:手动复制执行(适合调试场景)

如果仅需临时执行,先查询获取所有SQL脚本:

SELECT SQL_SCRIPT FROM TABLE(DIMENSIONS.DBMETA.GET_TABLES());

将结果集中的每一行SQL脚本复制出来,单独运行即可。

内容的提问来源于stack exchange,提问作者Matt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:27:40