Làm cách nào để truy vấn cơ sở dữ liệu Oracle để hiển thị tên của tất cả các bảng trong đó?
Làm cách nào để truy vấn cơ sở dữ liệu Oracle để hiển thị tên của tất cả các bảng trong đó?
Câu trả lời:
SELECT owner, table_name
FROM dba_tables
Điều này giả định rằng bạn có quyền truy cập vào DBA_TABLES
chế độ 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
vai trò (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ừ các lược đồ nhất định như SYS
và SYSTEM
có số lượng lớn các 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 DBA_TABLES
, bạn có thể thấy 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
chế độ 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 các 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
Vì USER_TABLES
chỉ có thông tin về các bảng mà bạn sở hữu, nên nó không có OWNER
cột - chủ sở hữu, theo định nghĩa, là bạn.
Oracle cũng có một số lượng dữ liệu di sản từ điển views-- TAB
, DICT
, TABS
, và CAT
cho ví dụ điển mà 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 nhập các tập lệnh của mình vào Oracle 6. Oracle đã không thay đổi các khung nhìn này trong một thời gian dài để chúng thường gặp vấn đề với các loại đối tượng mới hơn. Ví dụ: cả hai khung nhìn TAB
và CAT
hiển thị thông tin về các bảng trong thùng rác của người dùng trong khi [DBA|ALL|USER]_TABLES
tất cả các khung nhìn đều lọc chúng ra. CAT
cũng hiển thị thông tin về nhật ký xem được cụ thể hóa với TABLE_TYPE
"BẢNG" không chắc là những gì 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.
Truy vấn user_tables
và dba_tables
không hoạt động.
Điều này đã làm:
select table_name from all_tables
Đi thêm một bước nữa, có một khung nhìn khác gọi là cols (all_tab_columns) có thể được sử dụng để xác định bảng nào chứa tên cột đã cho.
Ví dụ:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
để tìm tất cả các bảng có tên bắt đầu bằng EST và các cột có chứa CALLREF ở bất cứ đâu trong tên của chúng.
Điều này có thể giúp đỡ khi tìm ra những cột bạn muốn tham gia, ví dụ, tùy thuộc vào quy ước đặt tên bảng và cột của bạn.
select * from cols
và nhận được 0 hàng trả lại.
sqlplus
Nếu bạn đang sử dụng, sqlplus
trước tiên bạn có thể muốn thiết lập một vài tham số để xem đẹp hơn nếu các cột của bạn bị sai lệch (các biến này không nên tồn tại sau khi bạn thoát sqlplus
phiên):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
Sau đó, bạn có thể sử dụng một cái gì đó như thế này để xem tất cả các tên bảng:
SELECT table_name, owner, tablespace_name FROM all_tables;
Như @Justin Cave đề cập, bạn có thể sử dụng điều này để chỉ hiển thị các bảng mà bạn sở hữu:
SELECT table_name FROM user_tables;
Hãy nhớ rằng một số "bảng" thực sự có thể là "lượt xem" để bạn cũng có thể thử chạy một cái gì đó như:
SELECT view_name FROM all_views;
Điều này sẽ mang lại một cái gì đó trông khá chấp nhận như:
pagesize 30
với pagesize 1000
?
Truy vấn đơn giản để chọn các bảng cho người dùng hiện tại:
SELECT table_name FROM user_tables;
Hãy thử các chế độ xem từ điển dữ liệu dưới đây.
tabs
dba_tables
all_tables
user_tables
Hãy thử chọn từ user_tables liệt kê các bảng thuộc sở hữu của người dùng hiện tại.
Cơ sở dữ liệu Oracle để hiển thị tên của tất cả các bảng bằng cách sử dụng truy vấn bên dưới
Chủ sở hữu CHỌN, tên_bảng TỪ dba_tables; Chủ sở hữu CHỌN, tên_bảng TỪ all_tables; CHỌN tên_bảng TỪ user_tables;
tham khảo thêm: http : //www.plsqlinatures.com/2016/08/get-list-of-all-tables-in-oracle.html
select * from dba_tables
chỉ cung cấp tất cả các bảng của tất cả người dùng nếu người dùng mà bạn đăng nhập có các sysdba
đặc quyền.
Tôi không tìm thấy câu trả lời sẽ sử dụng
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
Vì vậy, quyết định thêm phiên bản của tôi là tốt. Khung nhìn này thực sự trả về nhiều hơn DBA_TABLES vì nó cũng trả về các bảng đối tượng ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statview_1003.htm ).
Bạn có thể sử dụng Oracle Data Dictionary để lấy thông tin về các đối tượng oracle.
Bạn có thể lấy danh sách các bảng theo nhiều cách khác nhau:
select *
from dba_tables
hoặc ví dụ:
select *
from dba_objects
where object_type = 'TABLE'
Sau đó, bạn có thể nhận được các cột bảng bằng tên bảng:
select *
from dba_tab_columns
Sau đó, bạn có thể nhận được danh sách các phụ thuộc (kích hoạt, lượt xem và v.v.):
select *
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name
Sau đó, bạn có thể lấy nguồn văn bản của các đối tượng này:
select * from dba_source
Và bạn có thể sử dụng USER
hoặc ALL
xem thay vì DBA
nếu bạn muốn.
Bao gồm các lượt xem:
SELECT owner, table_name as table_view
FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
FROM DBA_VIEWS
Chúng tôi có thể nhận được tất cả các bảng bao gồm các chi tiết cột từ truy vấn bên dưới:
SELECT * FROM user_tab_columns;
Dưới đây là một đoạn nhận xét về các truy vấn SQL mô tả cách các tùy chọn bạn có thể sử dụng:
-- need to have select catalog role
SELECT * FROM dba_tables;
-- to see tables of your schema
SELECT * FROM user_tables;
-- tables inside your schema and tables of other schema which you possess select grants on
SELECT * FROM all_tables;
Một tính năng mới có sẵn trong SQLcl (là giao diện dòng lệnh miễn phí cho Cơ sở dữ liệu Oracle) là
Tables
bí danh.
Dưới đây là một vài ví dụ cho thấy việc sử dụng và các khía cạnh bổ sung của tính năng. Đầu tiên, kết nối với một sql
dòng lệnh ( sql.exe
trong windows). Bạn nên nhập lệnh cụ thể sqlcl này trước khi chạy bất kỳ lệnh hoặc truy vấn nào khác hiển thị dữ liệu.
SQL> set sqlformat ansiconsole -- resizes the columns to the width of the
-- data to save space
SQL> tables
TABLES
-----------
REGIONS
LOCATIONS
DEPARTMENTS
JOBS
EMPLOYEES
JOB_HISTORY
..
Để biết tables
bí danh đang đề cập đến điều gì, bạn chỉ cần sử dụngalias list <alias>
SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------
select table_name "TABLES" from user_tables
Bạn không phải xác định bí danh này vì nó được mặc định theo SQLcl. Nếu bạn muốn liệt kê các bảng từ một lược đồ cụ thể, sử dụng bí danh do người dùng xác định mới và chuyển tên lược đồ làm đối số liên kết chỉ với một tập hợp các cột được hiển thị, bạn có thể sử dụng
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
Sau đó, bạn có thể chỉ cần chuyển tên lược đồ làm đối số
SQL> tables_schema HR
OWNER TABLE_NAME LAST_ANALYZED
HR DUMMY1 18-10-18
HR YOURTAB2 16-11-18
HR YOURTABLE 01-12-18
HR ID_TABLE 05-12-18
HR REGIONS 26-05-18
HR LOCATIONS 26-05-18
HR DEPARTMENTS 26-05-18
HR JOBS 26-05-18
HR EMPLOYEES 12-10-18
..
..
Một bí danh được xác định trước phức tạp hơn được gọi là Tables2
, hiển thị một số cột khác.
SQL> tables2
Tables
======
TABLE_NAME NUM_ROWS BLOCKS UNFORMATTED_SIZE COMPRESSION INDEX_COUNT CONSTRAINT_COUNT PART_COUNT LAST_ANALYZED
AN_IP_TABLE 0 0 0 Disabled 0 0 0 > Month
PARTTABLE 0 0 0 1 0 1 > Month
TST2 0 0 0 Disabled 0 0 0 > Month
TST3 0 0 0 Disabled 0 0 0 > Month
MANAGE_EMPLYEE 0 0 0 Disabled 0 0 0 > Month
PRODUCT 0 0 0 Disabled 0 0 0 > Month
ALL_TAB_X78EHRYFK 0 0 0 Disabled 0 0 0 > Month
TBW 0 0 0 Disabled 0 0 0 > Month
DEPT 0 0 0 Disabled 0 0 0 > Month
Để biết truy vấn nào chạy trong nền, nhập
alias list tables2
Điều này sẽ cho bạn thấy một truy vấn phức tạp hơn một chút cùng với các column
định nghĩa được xác định trước thường được sử dụng trong SQL * Plus.
Jeff Smith giải thích thêm về bí danh ở đây
Tôi đang tìm kiếm một danh sách tất cả các tên cột thuộc về một bảng của lược đồ được sắp xếp theo thứ tự của id cột.
Đây là truy vấn tôi đang sử dụng: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
Trên thực tế, nó có thể có danh sách các bảng thông qua SQL queries.it có thể làm điều đó cũng qua công cụ cho phép các thế hệ của từ điển dữ liệu, chẳng hạn như Erwin , Toad Data Modeler hoặc ERBuilder . Với các công cụ này, ngoài tên bảng, bạn sẽ có các trường, loại, đối tượng của chúng như (trình kích hoạt, trình tự, tên miền, chế độ xem ...)
Dưới đây các bước để làm theo để tạo định nghĩa bảng của bạn:
Cơ sở dữ liệu của bạn sẽ được hiển thị trong phần mềm dưới dạng sơ đồ Mối quan hệ thực thể.
select * from all_all_tables
bổ sung 'tất cả' ở đầu cung cấp thêm 3 cột đó là:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
(như được thực hiện trong MySQL) có hoạt động không?