Snowflake使用GET_DDL命令获取存储过程DDL时缺失定义问题求助
问题原因
GET_DDL返回存储过程AS后内容为空的核心原因是当前使用的角色缺少存储过程的READ DEFINITION权限,即使已配置Schema级别的基础权限,该权限也需要单独配置。
解决方案
- 首先确认当前会话使用的角色是否为预期的已授权角色,执行命令校验:
SELECT CURRENT_ROLE();
- 给对应角色授予指定存储过程的READ DEFINITION权限,替换尖括号内的自定义参数后执行:
GRANT READ DEFINITION ON PROCEDURE EMPLOYEE_INSERT() TO ROLE <你的目标角色名>;
- 如果你需要批量获取该Schema下所有存储过程的DDL,可以执行批量授权命令:
GRANT READ DEFINITION ON ALL PROCEDURES IN SCHEMA <你的数据库名>.<你的Schema名> TO ROLE <你的目标角色名>;
- 如需后续该Schema下新建的存储过程自动授予该权限,执行未来对象授权命令:
GRANT READ DEFINITION ON FUTURE PROCEDURES IN SCHEMA <你的数据库名>.<你的Schema名> TO ROLE <你的目标角色名>;
- 若仍无法获取,补充授予存储过程的USAGE权限:
GRANT USAGE ON PROCEDURE EMPLOYEE_INSERT() TO ROLE <你的目标角色名>;
- 授权完成后重新执行GET_DDL查询即可获取完整定义,注意存储过程名称后需要带上完整的参数签名(无参数也要带空括号):
SELECT GET_DDL('PROCEDURE', 'EMPLOYEE_INSERT()');
内容的提问来源于stack exchange,提问作者SMValiAli
相关产品推荐
相关产品推荐

