SELECT owner, table_name
FROM dba_tables
Điều này giả sử rằng bạn có quyền truy cập vào DBA_TABLES
xem từ điển dữ liệu. Nếu bạn không có những đặc quyền đó nhưng cần chúng, bạn có thể yêu cầu DBA cấp rõ ràng cho bạn các đặc quyền trên bảng đó hoặc DBA cấp cho bạn SELECT ANY DICTIONARY
đặc quyền hoặc SELECT_CATALOG_ROLE
role (một trong hai sẽ cho phép bạn truy vấn bất kỳ bảng từ điển dữ liệu nào). Tất nhiên, bạn có thể muốn loại trừ một số lược đồ nhất định như SYS
và SYSTEM
có số lượng lớn bảng Oracle mà bạn có thể không quan tâm.
Ngoài ra, nếu bạn không có quyền truy cập vào DBA_TABLES
, bạn có thể xem tất cả các bảng mà tài khoản của bạn có quyền truy cập thông qua ALL_TABLES
xem:
SELECT owner, table_name
FROM all_tables
Mặc dù, đó có thể là một tập hợp con của các bảng có sẵn trong cơ sở dữ liệu (ALL_TABLES
hiển thị cho bạn thông tin cho tất cả các bảng mà người dùng của bạn đã được cấp quyền truy cập).
Nếu bạn chỉ quan tâm đến các bảng mà bạn sở hữu, không phải những bảng mà bạn có quyền truy cập, bạn có thể sử dụng USER_TABLES
:
SELECT table_name
FROM user_tables
Kể từ USER_TABLES
chỉ có thông tin về các bảng mà bạn sở hữu, nó không có OWNER
- chủ sở hữu, theo định nghĩa, là bạn.
Oracle cũng có một số chế độ xem từ điển dữ liệu kế thừa - TAB
, DICT
, TABS
và CAT
ví dụ-- có thể được sử dụng. Nói chung, tôi sẽ không đề xuất sử dụng các khung nhìn kế thừa này trừ khi bạn thực sự cần phải backport các tập lệnh của mình sang Oracle 6. Oracle đã không thay đổi các khung nhìn này trong một thời gian dài nên chúng thường gặp vấn đề với các loại đối tượng mới hơn. Ví dụ:TAB
và CAT
cả hai chế độ xem đều hiển thị thông tin về các bảng nằm trong thùng rác của người dùng trong khi [DBA|ALL|USER]_TABLES
xem tất cả lọc ra. CAT
cũng hiển thị thông tin về nhật ký chế độ xem cụ thể hóa với TABLE_TYPE
của "TABLE" không chắc là thứ bạn thực sự muốn. DICT
kết hợp các bảng và từ đồng nghĩa và không cho bạn biết ai sở hữu đối tượng.