Làm cách nào để tìm một đối tượng dường như không tồn tại trong bảng đối tượng?


11

Tôi có một đối tượng được gọi là cot_ntn_pi_v. Tôi đã nói đây là một từ đồng nghĩa. Nó không xuất hiện trong bảng all_synonymouss. Nó trông giống như một khung nhìn hoặc bảng nhưng tôi không thể tìm thấy nó trong bảng tất cả các đối tượng. Tôi có thể chọn từ nó, nhưng tôi không thể bỏ nó vì nó 'không tồn tại' và tôi không thể tạo một bảng mới có cùng tên với 'tên đã được sử dụng bởi một đối tượng khác.'

Tôi đang phát điên hay làm điều gì đó thực sự ngu ngốc?


1
Nếu bạn không có quyền đối với mặt hàng, nó có thể không hiển thị trong bảng ALL_ *. Bạn có thể cần đăng nhập quản trị và tìm trong bảng từ điển dữ liệu DBA_ *.
Mối quan tâmOfTunbridgeWells

Câu trả lời:


11

Các loại đối tượng trong cùng một không gian tên như một bảng là:

  • Thủ tục độc lập
  • Các chức năng lưu trữ độc lập
  • Gói
  • Các loại do người dùng xác định
  • Trình tự
  • Lượt xem
  • Từ đồng nghĩa riêng
  • Quan điểm cụ thể hóa

Vì vậy, nó có lẽ là một trong những loại. Nếu bạn có thể chọn từ nó thì nó sẽ loại bỏ năm đầu tiên để nó trở thành bảng, dạng xem, từ đồng nghĩa riêng hoặc dạng xem cụ thể.

Khi bạn tìm kiếm trong all_objectsvv bạn đã sử dụng chữ hoa? Ví dụ,

select *
  from ALL_OBJECTS
 where OBJECT_NAME = 'COT_NTN_PI_V'; 

Nếu bạn sử dụng một số công cụ như SQL Developer hoặc Toad, bạn có thể để nó mô tả đối tượng cho bạn. Đánh dấu tên trong công cụ và nhấn Shift-F4trong Nhà phát triển hoặc Con F4cóc. Con cóc cung cấp rất nhiều mô tả về đối tượng trong khi Nhà phát triển, trong tab Chi tiết, sẽ có một hàng có TABLE_NAMEhoặc MVIEW_NAMEtrong đó và nó sẽ cho bạn thấy nó là gì.

Một khi bạn biết nó là gì thì nó sẽ giúp bạn biết cách thả nó dễ dàng hơn.


Có bằng cách sử dụng nhà phát triển sql và shift + f4 tôi đã có thể tìm ra những gì tôi cần! Cảm ơn :)
BON

4

Bạn có thể không nhìn thấy đối tượng trong các bảng ALL_% nếu bạn không có bất kỳ khoản trợ cấp nào cho chính đối tượng đó, vì vậy hãy kiểm tra trong bảng DBA_OBJECTS (bạn sẽ cần tài trợ / người dùng được cấp phù hợp để thực hiện việc này):

select * 
from DBA_OBJECTS
where object_name = 'COT_NTN_PI_V';

Nếu điều đó không tạo ra bất kỳ đầu ra nào, bạn có thể kiểm tra các bảng từ điển dữ liệu Oracle thô với truy vấn này:

select u.name as owner, o.name as object_name, 
 decode(o.type#, 0, 'NEXT OBJECT', 1, 'INDEX', 2, 'TABLE', 3, 'CLUSTER',
 4, 'VIEW', 5, 'SYNONYM', 6, 'SEQUENCE',
 7, 'PROCEDURE', 8, 'FUNCTION', 9, 'PACKAGE',
 11, 'PACKAGE BODY', 12, 'TRIGGER',
 13, 'TYPE', 14, 'TYPE BODY',
 19, 'TABLE PARTITION', 20, 'INDEX PARTITION', 21, 'LOB',
 22, 'LIBRARY', 23, 'DIRECTORY', 24, 'QUEUE',
 28, 'JAVA SOURCE', 29, 'JAVA CLASS', 30, 'JAVA RESOURCE',
 32, 'INDEXTYPE', 33, 'OPERATOR',
 34, 'TABLE SUBPARTITION', 35, 'INDEX SUBPARTITION',
 39, 'LOB PARTITION', 40, 'LOB SUBPARTITION',
 43, 'DIMENSION',
 44, 'CONTEXT', 47, 'RESOURCE PLAN',
 48, 'CONSUMER GROUP',
 51, 'SUBSCRIPTION', 52, 'LOCATION', 56, 'JAVA DATA', 'UNKNOWN') as type,
o.ctime, o.mtime,
 to_char(o.stime, 'YYYY-MM-DD:HH24:MI:SS'),
 decode(o.status, 0, 'N/A', 1, 'VALID', 'INVALID') as status
 from sys.obj$ o, sys.user$ u
 where o.owner# = u.user#
 and o.linkname is null
 and (o.type# not in (1 , 10) or
 (o.type# = 1 and 1 = (select 1
 from sys.ind$ i
 where i.obj# = o.obj#
 and i.type# in (1, 2, 3, 4, 6, 7, 9))))
 and o.name = 'COT_NTN_PI_V';
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.