Làm thế nào để tôi liệt kê tất cả các bảng trong một lược đồ trong Oracle SQL?
Làm thế nào để tôi liệt kê tất cả các bảng trong một lược đồ trong Oracle SQL?
Câu trả lời:
Để xem tất cả các bảng trong một lược đồ khác, bạn cần phải có một hoặc nhiều đặc quyền hệ thống sau:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
hoặc búa lớn, vai trò DBA.
Với bất kỳ trong số đó, bạn có thể chọn:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Nếu không có các đặc quyền hệ thống đó, bạn chỉ có thể thấy các bảng bạn đã được cấp một số mức truy cập, cho dù trực tiếp hoặc thông qua vai trò.
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
Cuối cùng, bạn luôn có thể truy vấn từ điển dữ liệu cho các bảng của riêng mình, vì quyền của bạn đối với các bảng của bạn không thể bị thu hồi (kể từ 10g):
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
DISTINCT
truy vấn. owner, object_name
là duy nhất trongALL_OBJECTS
owner, object_name
không phải là duy nhất bởi bất kỳ phương tiện nào trong dba_objects; Cả hai Gói và Gói đều xuất hiện trong chế độ xem đó và Bảng và Chỉ mục ở các không gian tên khác nhau.
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
Bạn có thể truy vấn USER_TABLES
select TABLE_NAME from user_tables
Hãy thử điều này, thay thế? với tên lược đồ của bạn
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
Nếu bạn đang truy cập Oracle bằng JDBC (Java), bạn có thể sử dụng lớp DatabaseMetadata . Nếu bạn đang truy cập Oracle bằng ADO.NET, bạn có thể sử dụng một cách tiếp cận tương tự.
Nếu bạn đang truy cập Oracle bằng ODBC, bạn có thể sử dụng chức năng SQLTables .
Mặt khác, nếu bạn chỉ cần thông tin trong SQLPlus hoặc máy khách Oracle tương tự, một trong những truy vấn đã được đề cập sẽ thực hiện. Ví dụ:
select TABLE_NAME from user_tables
Bạn có thể trực tiếp chạy truy vấn thứ hai nếu bạn biết tên chủ sở hữu.
--Đầu tiên bạn có thể chọn những gì tất cả các chủ sở hữu tồn tại:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
-Sau đó, bạn có thể thấy các bảng bên dưới của chủ sở hữu đó:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
Nhìn vào tiện ích đơn giản của tôi để hiển thị một số thông tin về lược đồ db. Nó dựa trên: Kỹ thuật đảo ngược mô hình dữ liệu bằng cách sử dụng từ điển dữ liệu Oracle
Nếu bạn cũng cần phải có kích thước của bảng, điều này sẽ rất tiện lợi:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
%_OBJECTS
thay vì%_TABLES
.