如何使用Regex Substring函数提取SQL语句中的存储过程名称
存储过程名提取正则方案
适配场景
- 带
OR REPLACE的创建语法:Create OR Replace Procedure <存储过程名>() - 不带
OR REPLACE的基础创建语法:CREATE PROCEDURE <存储过程名>()
通用正则表达式
(?i)(?:CREATE\s+(?:OR\s+REPLACE\s+)?PROCEDURE\s+)([a-zA-Z0-9_]+)
正则规则说明
(?i):开启大小写不敏感匹配,兼容全小写、全大写、大小写混合的SQL写法(?:CREATE\s+(?:OR\s+REPLACE\s+)?PROCEDURE\s+):非捕获组,匹配两种前缀,?标识OR REPLACE片段为可选项([a-zA-Z0-9_]+):捕获组,匹配符合标准SQL标识符规则的存储过程名称,你可根据实际业务的命名规则调整允许的字符范围
不同数据库REGEXP_SUBSTRING使用示例
Snowflake 示例
SELECT REGEXP_SUBSTR(your_sql_column, '(?i)(?:CREATE\\s+(?:OR\\s+REPLACE\\s+)?PROCEDURE\\s+)([a-zA-Z0-9_]+)', 1, 1, 'e', 1) AS procedure_name FROM your_query_history_table;
MySQL 8.0+ 示例
SELECT REGEXP_SUBSTR(your_sql_column, '(?i)(?:CREATE\\s+(?:OR\\s+REPLACE\\s+)?PROCEDURE\\s+)([a-zA-Z0-9_]+)', 1, 1, 'c', 1) AS procedure_name FROM your_query_history_table;
测试验证结果
| 测试SQL文本 | 提取结果 |
|---|---|
Create OR Replace Procedure PROCEDURENAME() | PROCEDURENAME |
CREATE PROCEDURE PROCEDUREENAME() | PROCEDUREENAME |
create procedure my_test_proc() | my_test_proc |
create or replace procedure Proc_123() | Proc_123 |
内容的提问来源于stack exchange,提问作者akshindesnowflake
相关产品推荐
相关产品推荐

