【发布时间】:2019-12-13 10:00:53
【问题描述】:
我想使用 regexp_substr 提取包名。
例如:
创建或替换包体 something.pkg_test 是
我想要那个:
pkg_test
我尝试使用lookbehind 来忽略“创建或替换包主体的东西。”:
select regexp_substr('create or replace package body something.pkg_test is','((?<!create\sor\sreplace\spackage\sbody\ssomething\.).)*$',1,1) from dual;
但它不起作用。所以我只需要在“create or replace package body something”和第一个空格或\n之间提取包名。
我需要它,因为我需要在编译 .sql 文件并将其插入表之前的包名。
【问题讨论】:
-
如果你想检查一个包名,为什么不做一个简单的
like检查而不是用正则表达式提取呢?if line like 'create%or%replace%package%body%something.pkg_test%' then ...。它不是万无一失的,但应该可以满足您的目的。 -
我想在编译前提取包名并插入到一个表中。我只有 .sql 文件。不知道包名是什么。我把“check”这个词改成“想要包名”
-
您可能还需要考虑可选关键字
EDITIONABLE和NONEDITIONABLE。尽管几乎没有人关心它们,但很多工具会自动生成它们,并且它们可能会出现在 DDL 中。 -
@JonHeller 你说得有道理。我会考虑现在我知道该怎么做。