Saklı yordamın nerede kullanıldığını nasıl bulabilirsiniz (diğer saklı yordamlarda)


10

Ben binlerce SP olan bir veritabanında, refactor istiyorum saklı bir yordam var. Ben refactor zaman başka bir kod kırma emin olabilirsiniz böylece diğer SP'lerde bu saklı yordam başvuruları bulmak için hızlı bir yolu var mı.

Uygulama kodunda SP'ye kolayca çağrıları arayabilirim ve SP'leri tanımlayan çeşitli sql dosyaları üzerinde bir metin araması yapabilirim, ancak veritabanında bu şekilde özlenebilecek bazı SP'ler olabilir. .

EDIT: Bulmaya çalıştığım saklı yordamlar bir paketin parçasıdır.

EDIT: Oracle 11g üzerinde çalışıyorum

Yanıtlar:


11

DBA_DEPENDENCIES görünüm bu tür soruların tüm cevaplarına sahiptir.

select * from DBA_DEPENDENCIES
  where referenced_owner='HR' and referenced_name='STORED_PROCEDURE_41';

2
Ancak dinamik sql kullanıyorsanız bu yaklaşım çalışmaz. örn., dinamik sql'nin bir parçası olarak bir prosedür yürütürseniz. Aksi takdirde dba_ veya all_dependencies harika çalışır.
Raj

1
Bu yardımcı olur ve bir kullanıcı tarafından tanımlanan işlevleri ve yordamları bulabilirsiniz, ancak bir pakette tanımlanan FN veya SP bulamıyorum görünmüyor. Düşüncesi olan var mı?
Peter Bagnall

Bu durumda, bir paket aramak zorundadır. DBA_DEPENDENCIESbize belirli bir nesne bırakılırsa nelerin geçersiz kılınacağını gösterir. Yani örneğin hangi görünümler referans tablosunu bulabilirsiniz.
Mindaugas Riauba


0

Benzer bir durum vardı, sadece belirli bir paket kullanan paketlerin bir listesini almak için gerekli; bu yüzden bu sorguyu yaptı, belki yardımcı olur:

with dep2 as (
    select dep.*
    from all_dependencies dep
    where dep.owner not in ('SYS', 'SYSTEM', 'PUBLIC', 'XDB')
    and dep.referenced_owner not in ('SYS', 'SYSTEM', 'PUBLIC', 'XDB')
    and dep.referenced_type = 'PACKAGE'
    and dep.dependency_type != 'NON-EXISTENT'
    and (dep.referenced_owner || '.' || dep.referenced_name) != (dep.owner || '.' || dep.name)
),
dep3 as (
    select owner || '.' || name as child,
    referenced_owner || '.' || referenced_name as parent
    from dep2
)
select connect_by_root parent, lpad(' ',2*(level-1)) || to_char(child) 
from dep3
start with parent = 'SCHEMA.PACKAGE_NAME'
connect by nocycle prior child = parent 
and exists (select 1 from all_source where (owner || '.' || name) = dep3.child and upper(text) like upper('%optional, some string you may want to search%')) 
;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.