snowflake-cloud-data-platform - 是否有函数将 ARGUMENT_SIGNATURE 转换为调用 drop 时使用的格式
问题描述
我无法以正确的格式获取信息模式 PROCEDURES 表的 ARGUMENT_SIGNATURE 以在 drop 语句中使用。
完整示例如下:
创建一个像
create or replace procedure proc1(P1 FLOAT, P2 FLOAT) returns string
language javascript as $$ $$;
从信息架构/程序中选择:
SELECT PROCEDURE_NAME, ARGUMENT_SIGNATURE FROM TEST_DB.INFORMATION_SCHEMA.PROCEDURES
WHERE PROCEDURE_NAME = 'PROC1' ;
产生以下结果
PROCEDURE_NAME ARGUMENT_SIGNATURE
-------------- --------------------
PROC1 (P1 FLOAT, P2 FLOAT)
用于删除 PROC1 过程的删除命令必须如下所示:
drop procedure PROC1 (FLOAT, FLOAT)
所以这里的问题是我如何从“(P1 FLOAT,P2 FLOAT)”到“(FLOAT,FLOAT)”?即是否有一个函数可以让我运行类似的东西:
SELECT PROCEDURE_NAME, ARGUMENT_SIGNATURE, SOMEFUNC(ARGUMENT_SIGNATURE) AS ARGTYPELIST
FROM TEST_DB.INFORMATION_SCHEMA.PROCEDURES WHERE PROCEDURE_NAME = 'PROC1' ;
其中列 ARGTYPELIST 的格式为 (FLOAT, FLOAT)。
我曾尝试使用 regexp_replace 但似乎无法正确处理。也许有更好的方法?我需要这是一个纯 SQL 解决方案。字符“(”“)”不需要保留。一些预期的输出
"(P1 FLOAT, P2 FLOAT)" --> "FLOAT,FLOAT"
"()" --> ""
"(P1 FLOAT)" --> "FLOAT"
解决方案
这是一个正则表达式选项。它有点乱,但也会处理额外的空白。
SELECT REGEXP_REPLACE('(P1 FLOAT, P2 STRING)', '([(,]\\s*)\\w*\\s*(\\w*\\)?)', '\\1\\2');
退货
(FLOAT, STRING)
此版本将删除 Parens:
SELECT REGEXP_REPLACE('(P1 FLOAT, P2 STRING)', '\\(?([,]\\s*)?\\w*\\s*(\\w*)\\)?', '\\1\\2');
推荐阅读
- angular - 在获取服务调用中获取 null 而在 Angular 中没有错误
- php - 在 WooCommerce 订单电子邮件上显示使用过的优惠券 + 特定消息
- playframework-2.6 - sbt dist 是编译代码还是只是从目标目录复制文件
- javascript - “ms”包的时间限制
- python - 创建自定义 django jwt 令牌时“令牌不包含可识别的用户标识”
- reactiveui - ReactiveUI WhenAnyValue
- mysql - 表空间文件./sys/sys_config.ibd的大小只有81920,至少应该是98304
- ruby-on-rails - 如何为来自 Rails 视图的日期设置时区
- c# - MVC 在 ViewModels 中使用 DTO 类
- firebase - Flutter Firebase 流中的 Where 子句