从DDL获取存储过程名称的无限循环[关闭]

Posted

技术标签:

【中文标题】从DDL获取存储过程名称的无限循环[关闭]【英文标题】:Infinite loop getting stored procedure name from DDL [closed] 【发布时间】:2015-02-11 07:09:14 【问题描述】:

我有这个正则表达式来检查 DLL 是否有程序

var expReg = "(((ALTER|CREATE|OR|REPLACE| )*)+)?PROCEDURE.*";    
return (Regex.IsMatch(textProcedure, expReg, RegexOptions.IgnoreCase)

我将它与 SQL Server 或 Oracle DLL 一起使用。

有时有效,有时有无限循环。

有什么问题?非常感谢任何帮助。

【问题讨论】:

你想匹配什么?请提供一些示例字符串和预期结果。 Why my Python regular expression pattern run so slowly?的可能重复 【参考方案1】:

(X*)+ 形式的模式在正则表达式中是一个非常糟糕的主意,因为它可能导致catastrophic backtracking。这种模式迫使正则表达式引擎在失败之前尝试所有可能的组合。这可能需要很长时间。

在你的情况下,我认为* 不是必需的,只需使用:

(?:ALTER|CREATE|OR|REPLACE|\s)+PROCEDURE

我也删除了?,否则仅仅存在PROCEDURE这个词就足以匹配模式。

这可以进一步简化为:

(?:ALTER|CREATE|REPLACE)\s+PROCEDURE

因为匹配字符串CREATE OR REPLACE PROCEDURE中的REPLACE PROCEDURE就足够了。

【讨论】:

谢谢卢卡斯。您发送了一个解决方案,以及我的常规表达不佳的原因。我认为您的解决方案可以帮助一些人。

以上是关于从DDL获取存储过程名称的无限循环[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从Oracle存储过程Oracle 11g发送邮件

使用 Dapper 从存储过程中获取字段名称

oracle存储过程循环插数据

如何php调用oracle存储过程返回的是一个结果集,该怎么从php页面中吧数据循环输出呀

如何在循环中使用 curl PHP 100 次? [关闭]

oracle 执行存储过程 无法中断 但是是循环执行 怎么办