Existe-t-il une requête que je peux exécuter pour rechercher dans tous les packages afin de déterminer si une table et/ou une colonne particulière est utilisée dans le package? Il y a trop de paquets pour ouvrir chacun et faire une recherche sur la valeur que je cherche.
Tu peux le faire:
select *
from user_source
where upper(text) like upper('%SOMETEXT%');
Sinon, SQL Developer dispose d'un rapport intégré pour le faire sous:
View > Reports > Data Dictionary Reports > PLSQL > Search Source Code
Les documents 11G pour USER_SOURCE sont ici
vous pouvez utiliser les vues *_DEPENDENCIES
, par exemple:
SELECT owner, NAME
FROM dba_dependencies
WHERE referenced_owner = :table_owner
AND referenced_name = :table_name
AND TYPE IN ('PACKAGE', 'PACKAGE BODY')
Parfois, la colonne que vous recherchez peut faire partie du nom de nombreuses autres choses qui ne vous intéressent pas.
Par exemple, je recherchais récemment une colonne appelée "BQR", qui fait également partie de nombreuses autres colonnes telles que "BQR_OWNER", "PROP_BQR", etc.
Je voudrais donc que la case à cocher indique que le traitement de texte doit indiquer "Mots entiers uniquement".
Malheureusement, LIKE n’a pas cette fonctionnalité, mais REGEXP_LIKE peut vous aider.
SELECT *
FROM user_source
WHERE regexp_like(text, '(\s|\.|,|^)bqr(\s|,|$)');
Il s'agit de l'expression régulière permettant de rechercher cette colonne et d'exclure les autres colonnes contenant "BQR" dans le nom:
(\s|\.|,|^)bqr(\s|,|$)
L'expression régulière correspond à un espace (\ s), ou (|) point (.), Ou (|) virgule (,) ou (|) début de ligne (^), suivi de "bqr", par un espace, une virgule ou une fin de ligne ($).
En passant, si vous devez ajouter d'autres caractères tels que "(" ou ")" car la colonne peut être utilisée comme "UPPER (bqr)", vous pouvez ajouter ces options aux listes de caractères avant et après.
(\s|\(|\.|,|^)bqr(\s|,|\)|$)