2009-05-12 25 views
21

Tôi cần viết một số sql cho phép tôi truy vấn tất cả các đối tượng trong cơ sở dữ liệu Oracle của chúng tôi. Thật không may, các công cụ chúng tôi được phép sử dụng không được tích hợp sẵn. Về cơ bản, tôi cần phải tìm kiếm tất cả các bảng, thủ tục, trình kích hoạt, khung nhìn, mọi thứ.SQL để tìm kiếm các đối tượng, bao gồm các thủ tục được lưu trữ, trong Oracle

Tôi biết cách tìm kiếm tên đối tượng. Nhưng tôi cần phải tìm kiếm nội dung của đối tượng. tức là SELECT * FROM DBA_OBJECTS WHERE object_name = '% chuỗi tìm kiếm%';

Cảm ơn, Glenn

+0

Một nguồn lực tốt: http://www.techonthenet.com/oracle/sys_tables/ –

Trả lời

15

tôi không chắc chắn nếu tôi hiểu bạn, nhưng để truy vấn mã nguồn của trigger, thủ tục, đóng gói và các chức năng bạn có thể thử với "user_source" bảng của bạn.

select * from user_source 
29

Tôi không chắc tôi khá hiểu câu hỏi nhưng nếu bạn muốn đối tượng trên cơ sở dữ liệu tìm kiếm một chuỗi tìm kiếm cụ thể thử:

SELECT owner, name, type, line, text 
FROM dba_source 
WHERE instr(UPPER(text), UPPER(:srch_str)) > 0; 

Từ đó nếu bạn cần bất kỳ thông tin hơn bạn chỉ có thể tìm số đối tượng/dòng.

+0

bạn là anh hùng của tôi! –

+0

sử dụng 'CHỌN chủ sở hữu, tên, loại FROM dba_source WHERE instr (UPPER (tên), UPPER (': srch_strg'))> 0;' chỉ tìm kiếm trong tên .. có thể thực tế hơn cho một số – mCeviker

9

Tôi sẽ sử dụng DBA_SOURCE (nếu bạn có quyền truy cập vào nó) vì nếu đối tượng bạn yêu cầu không thuộc sở hữu của lược đồ mà bạn đã đăng nhập, bạn sẽ không thấy nó.

Nếu bạn cần phải biết các chức năng và Procs bên trong gói thử một cái gì đó như thế này:

select * from all_source 
where type = 'PACKAGE' 
    and (upper(text) like '%FUNCTION%' or upper(text) like '%PROCEDURE%') 
    and owner != 'SYS'; 

Dòng cuối cùng ngăn chặn tất cả những thứ sys (DBMS_ et al) khỏi bị trả lại. Điều này sẽ làm việc trong user_source nếu bạn chỉ muốn công cụ giản đồ của riêng bạn.

+0

[PLUS ONE] Điều này vừa cứu ngày của tôi! – GingerHead

1

ALL_SOURCE mô tả nguồn văn bản của các đối tượng được lưu trữ có thể truy cập cho người dùng hiện tại.

Đây là một trong những giải pháp

select * from ALL_SOURCE where text like '%some string%'; 
Các vấn đề liên quan