Извлечь все имена объектов из PL / SQL-файла в Notepad ++ - PullRequest
0 голосов
/ 22 марта 2019

Мне нужно получить функцию, процедуру, имена курсоров и другие объекты из файла тела пакета PL / SQL (* .spb) в Notepad ++, например, из этого сценария sql:

create or replace PACKAGE BODY pac_emp3 AS
PROCEDURE p_buscar_salario_emp3 (p_employee_id IN employees.employee_id%TYPE,
                                 p_employee_name OUT employees.first_name%type,
                                 p_string IN OUT varchar2)
AS
v_salario employees.salary%TYPE;
BEGIN
SELECT salary, first_name INTO v_salario, p_employee_name FROM employees WHERE employees.employee_id = p_employee_id;
p_string := 'Procedimiento terminado';
DBMS_OUTPUT.PUT_LINE('Salario: '|| v_salario);


END p_buscar_salario_emp3;

FUNCTION f_foo RETURN NUMBER IS
   SELECT 1+1 FROM DUAL;
   RETURN 1;
END;

END pac_emp3;

В этом случае мне нужно только извлечь: ПРОЦЕДУРА p_buscar_salario_emp3

или что текст выглядит только с объектом и именем объекта:

PROCEDURE p_buscar_salario_emp3
FUNCTION f_foo

То же самое с именами функций и т. Д.

Я понимаю, что это возможно с регулярным выражением, но с одним регулярным выражением?

Ответы [ 2 ]

0 голосов
/ 22 марта 2019
  • Ctrl + H
  • Найти что: (?:\A|\G)(?:(?!(?:PROCEDURE|FUNCTION)).)*((?:PROCEDURE|FUNCTION)\s+\w+)(?:(?!(?:PROCEDURE|FUNCTION)).)*
  • Заменить на: $1\n или $1\r\n
  • check Wrap вокруг
  • check Регулярное выражение
  • ПРОВЕРКА . matches newline
  • Заменить все

Пояснение:

(?:\|\G)                    # non capture group, beginning of strig or restart from last match position
(?:                         # start non capture group
  (?!                       # start negative lookahead
    (?:PROCEDURE|FUNCTION)  # non capture group PROCEDURE or FUNCTION (you can add other keywords)
  )                         # end lookahead
  .                         # any character
)*                          # end group, may appear 0 or more times
(                           # start group 1
  (?:PROCEDURE|FUNCTION)    # non capture group PROCEDURE or FUNCTION (you can add other keywords)
  \s+                       # 1 or more spaces
  \w+                       # 1 or more word character
)                           # end group 1
(?:                         # start non capture group
  (?!                       # start negative lookahead
    (?:PROCEDURE|FUNCTION)  # non capture group PROCEDURE or FUNCTION (you can add other keywords)
  )                         # end lookahead
  .                         # any character
)*                          # end group, may appear 0 or more times

Замена:

$1          # content of group 1
\n          # linefeed, use \r\n for windows line break

Результат для данного примера:

PROCEDURE p_buscar_salario_emp3
FUNCTION f_foo
0 голосов
/ 22 марта 2019

Это регулярное выражение должно работать для вас.

((PROCEDURE|FUNCTION) \S+) 

Если вам нужно добавить больше терминов, введите их следующим образом:

((PROCEDURE|FUNCTION|NEW_TERM) \S+) 
...