snowflake-cloud-data-platform - 雪花缺少 DDL 命令的定义
问题描述
我创建了一个用户和一个角色。
我授予数据库、模式和仓库的权限。也授予具有过程的模式。
但是,当我尝试通过 select get_ddl 命令获取过程 ddl 时,它会给出类似的结果。
CREATE OR REPLACE PROCEDURE "EMPLOYEE_INSERT"() RETURNS VARCHAR(16777216) LANGUAGE JAVASCRIPT EXECUTE AS OWNER AS '';
我没有得到过程定义。如果我得到任何帮助会很高兴。谢谢。
解决方案
由于get_ddl
返回任何东西,因此上下文中的角色很可能具有所需的授权。您看到这种情况的最可能原因是因为它返回了存储过程的重载——可能是一个较旧的存储过程,其中有人只创建了一个没有正文和参数的存根。
跑步show procedures in schema
,或者如果你需要的那个没有出现,你可以上一层,然后show procedures in database
。
在返回中,检查“参数”列。当您运行时,请select get_ddl('procedure'...
确保为感兴趣的重载指定参数。
例如,您可能会在“参数”列中看到如下内容:
FOO(VARCHAR, VARCHAR) RETURN VARCHAR
在这种情况下,要获取 SP 的主体,您将运行:
select get_ddl('procedure', 'FOO(VARCHAR, VARCHAR)');
关于这个的最后一个想法:get_ddl 将返回 SP 的主体,其中 AS 部分用单引号括起来。这意味着它必须将 SP 正文中各处的单引号加倍。如果原始的 create 语句不可用,这会使修改从 get_ddl 检索它的代码更加困难。我为这里的答案编写了一个存储过程,以将包装器和单个刻度更改为 $$: 如何使用 $$ 获取雪花存储过程 DDL
推荐阅读
- excel - 根据与多个不同值列表的接近程度应用条件格式
- java - 如何在 JDA 中发送图像
- sql - 将 count distinct 的结果转化为可以聚合的结果
- go - 使用 ptypes.Timestamp 与 timestamppb.Timestamp.AsTime 进行时间转换
- batch-file - 拖放 bat 文件以自动化 exiftool
- c++11 - 配备函数指针作为自定义删除器的 unique_ptr 是否与 shared_ptr 大小相同?
- android - 我可以从 Android/iOS 设备每 5 秒广播一次蓝牙低功耗 20 KB 数据吗?
- angular - 来自组件的 NGRX 顺序调用操作
- javascript - 异步回调返回值
- python-3.x - 如何访问给定的 xpath 结果?