i masaya
kullanılan dizisi ve tetikleyiciler ile benim veritabanı kullanıcı tablosunun listesi getirilemedi sorgu istiyorum Sen user_triggers
görünümden tablolar ilişkilendirilmiş tetikleyicileri alabilirsiniz. Daha sonra size ilgilendiğiniz olanları göstermek sadece bu yüzden user_sequences
görünümüne bu bağımlılıkları katılmadan, diziler (paketler vb) dışında nesneler içerebilir user_dependencies
bu tetikleyiciler için kaydedilen herhangi bağımlılıkları, arayabilirsiniz.
böyle bir şey, kendi şema bakıyoruz varsayarak ve dizileri başvuruda bulunduğunu tetikleyiciler sadece ilginçler (illa 'otomatik artışı' yapmıyorlar, ama olması muhtemeldir):
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from user_tables tabs
join user_triggers trigs
on trigs.table_name = tabs.table_name
join user_dependencies deps
on deps.name = trigs.trigger_name
join user_sequences seqs
on seqs.sequence_name = deps.referenced_name;
SQL Fiddle demo.
Aslında farklı bir şemaya bakıyorsanız, all_tables
vb. Kullanmanız ve aradığınız kullanıcı için filtrelenip sahip sütununa katılmanız gerekir. Tetikleyicileri olmayan tabloları veya dizilere başvurmayan tetikleyicileri eklemek istiyorsanız, dış birleştirmeler kullanabilirsiniz. Farklı şema arayan
Sürüm, bu varsayar olsa veri sözlüğü bilgileri erişmek için gerekli privs var - vb tablolar bunlar olmayabilir, hangi size görünür olmasını:
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from all_tables tabs
join all_triggers trigs
on trigs.table_owner = tabs.owner
and trigs.table_name = tabs.table_name
join all_dependencies deps
on deps.owner = trigs.owner
and deps.name = trigs.trigger_name
join all_sequences seqs
on seqs.sequence_owner = deps.referenced_owner
and seqs.sequence_name = deps.referenced_name
where tabs.owner = '<owner>';
o zaman onları göremiyorum Eğer yeterli privs var yine eğer, DBA görünümleri bakmak gerekebilir:
select tabs.table_name,
trigs.trigger_name,
seqs.sequence_name
from dba_tables tabs
join dba_triggers trigs
on trigs.table_owner = tabs.owner
and trigs.table_name = tabs.table_name
join dba_dependencies deps
on deps.owner = trigs.owner
and deps.name = trigs.trigger_name
join dba_sequences seqs
on seqs.sequence_owner = deps.referenced_owner
and seqs.sequence_name = deps.referenced_name
where tabs.owner = '<owner>';
Bir sekans doğrudan bir tabloya bağlı değildir, sadece bir tetikleyici veya açık bir ek ifadeyle dolaylı olarak (saklı yordam/paket içinde olabilir). 'Otomatik artış' ifadesinden bahsetmiş olduğunuzdan, değeri ayarlayan bir tetikleyici arıyorsunuzdur. ama sonra bunu bilmenize gerek yok, kimlik arka planda otomatik olarak ayarlanacaktır. Sıra ismini tablo adıyla ilişkilendiren bir adlandırma kuralı yoksa, tetikleyici kodunu ('all_source'da) aramanız gerekir, eğer sizin için görünürse ve tablo formunu bu şekilde çalıştırırsanız - diğerine daha kolay sormanız gerekir kullanıcı, belki? –
Aslında, veritabanı kullanıcımın tablosunun listesini tablodaki diziyi ve tetikleyicileri içeren sorguyu istiyorum. – user2492525
@ user2492525, herhangi bir tablo için hangi sekansların kullanıldığını sorgulamanın bir yolu yoktur * çünkü bunlar arasında bağlantı yoktur.Uygulamanız * kimlikleri yerleştirmek için tetikleyicileri kullanabilir *, bu durumda Alex Poole'un cevabı yararlı olabilir; veya başka bir uygulama tetikleyicileri hiç kullanmayabilir ve uygulama kodunda diziyi çağırabilir. Alt satırda, sorununuza yönelik genel bir çözüm yoktur. –