У меня есть сценарий sql для создания или замены пакетов в Oracle, и мне нужно проверить, находится ли запрос в синтаксисе схемы, например, «пользователь». «Объект», для таких инструкций, как «Создать» или «Изменить таблицу».Регулярное выражение простое, но в случае создания Package это не так просто для меня, потому что в некоторых случаях оно может включать слово «BODY».
Предположим, что мой файл содержит следующие строки (среди прочих):
CREATE OR REPLACE PACKAGE PKG_MASSIVE_SERVICE_AUTOMIC
CREATE OR REPLACE PACKAGE AUTOMIC.PKG_MASSIVE_SERVICE_AUTOMIC
CREATE OR REPLACE PACKAGE BODY PKG_MASSIVE_SERVICE_AUTOMIC
CREATE OR REPLACE PACKAGE BODY AUTOMIC.PKG_MASSIVE_SERVICE_AUTOMIC
Вторая и четыре строки являются единственно действительными, как я могу сопоставить только недействительные запросы, т.е. строки 1 и 3?
Я пыталсяиспользовать:
^CREATE\sOR\sREPLACE\sPACKAGE\s[a-zA-Z_0-9]+\s
Но он возвращает:
CREATE OR REPLACE PACKAGE PKG_MASSIVE_SERVICE_AUTOMIC
CREATE OR REPLACE PACKAGE BODY PKG_MASSIVE_SERVICE_AUTOMIC
CREATE OR REPLACE PACKAGE BODY AUTOMIC.PKG_CLAUSE_TIME_V1_241_AUTOMIC
Затем я попытался использовать вид сзади "
CREATE\sOR\sREPLACE\sPACKAGE\s(?=BODY\s)[a-zA-Z_0-9]+\s
, но не работает ни.
Вот пример файла сценария:
CREATE OR REPLACE PACKAGE PKG_MASSIVE_SERVICE_AUTOMIC
IS
Type REF_CUR Is Ref Cursor;
PROCEDURE PRC_GETACTIVATIONINFO_ARUS
(
VIDACTIVACION IN NUMBER,
RES_CURSOR OUT REF_CUR
);
PROCEDURE PRC_GETPAYMENTINFO_ARUS
(
VIDACTIVACION IN NUMBER,
RES_CURSOR OUT REF_CUR
);
PROCEDURE PRC_GETACTIVAPROCESSINFO_ARUS
(
VIDACTIVACION IN NUMBER,
RES_CURSOR OUT REF_CUR
);
PROCEDURE PRC_UPDATEPAGOS_ARUS
(
VIDACTIVACION IN NUMBER,
VIDPAGOSACTIVACION IN NUMBER
);
PROCEDURE PRC_GETACTPROCSBILLINGINF_ARUS
(
VIDACTIVACION IN NUMBER,
RES_CURSOR OUT REF_CUR
);
END;
/
CREATE OR REPLACE PACKAGE BODY PKG_MASSIVE_SERVICE_AUTOMIC
IS
PROCEDURE PRC_GETACTIVATIONINFO_ARUS