IIRC, PLSQL допускает вложенные пакеты и функции. В этом случае вы обнаружите, что «instring» и «substring» могут оказаться недостаточными для извлечения исходного кода, поскольку вы сталкиваетесь с рекурсией, а строковые функции обычно обрабатывают только меньший класс вычислений (обычно регулярные выражения). Это классическая проблема, с которой люди пытаются разобрать языки простым манипулированием строками. Вы можете обойти ограничения строковых функций, по сути взломав, чтобы создать парсер бедного человека, но это может быть удивительно много работы, если вы хотите, чтобы это было смертельно правильно, потому что вы должны обрабатывать по крайней мере рекурсивные грамматические правила, которые важны для экстракция.
Другим способом получения надежного доступа к элементам пакета PLSQL является использование синтаксического анализатора языка. DMS Software Reengineering Toolkit имеет полный анализатор PLSQL.
Сначала вам нужно будет извлечь текст пакета в файл, а затем применить к нему анализатор PLSQL; это создает абстрактное синтаксическое дерево (AST) внутри парсера. Учитывая имя функции, довольно просто найти AST для функции с соответствующим именем. Вы бы получили более одного удара, если у вас есть перегруженные функции; Вы можете квалифицировать функцию по иерархии, в которую она встроена, или по информации об аргументах, которые у вас могут быть. Определив конкретную функцию в AST, можно попросить DMS красиво распечатать это дерево, и оно восстановит текст (с комментариями) для этой функции.