ฉันจะสืบค้นฐานข้อมูล Oracle เพื่อแสดงชื่อของตารางทั้งหมดในนั้นได้อย่างไร
ฉันจะสืบค้นฐานข้อมูล Oracle เพื่อแสดงชื่อของตารางทั้งหมดในนั้นได้อย่างไร
คำตอบ:
SELECT owner, table_name
FROM dba_tables
นี่คือการสมมติว่าคุณมีการเข้าถึงDBA_TABLES
มุมมองพจนานุกรมข้อมูล หากคุณไม่มีสิทธิ์เหล่านั้น แต่ต้องการคุณสามารถขอให้ DBA มอบสิทธิ์ให้คุณอย่างชัดเจนบนโต๊ะนั้นหรือ DBA ให้SELECT ANY DICTIONARY
สิทธิ์หรือSELECT_CATALOG_ROLE
บทบาทแก่คุณ(อย่างใดอย่างหนึ่งจะช่วยให้คุณสามารถสืบค้นตารางพจนานุกรมข้อมูลใด ๆ ) แน่นอนคุณอาจต้องการยกเว้น schema ที่ต้องการSYS
และSYSTEM
มีตาราง Oracle จำนวนมากที่คุณอาจไม่สนใจ
อีกวิธีหนึ่งหากคุณไม่มีสิทธิ์เข้าถึงDBA_TABLES
คุณสามารถดูตารางทั้งหมดที่บัญชีของคุณมีสิทธิ์เข้าถึงผ่านALL_TABLES
มุมมอง:
SELECT owner, table_name
FROM all_tables
แม้ว่านั่นอาจเป็นส่วนหนึ่งของตารางที่มีอยู่ในฐานข้อมูล (ALL_TABLES
แสดงให้คุณสำหรับตารางทั้งหมดที่ผู้ใช้ของคุณได้รับอนุญาตให้เข้าถึง)
หากคุณกังวลเฉพาะกับตารางที่คุณเป็นเจ้าของไม่ใช่ผู้ที่คุณสามารถเข้าถึงได้คุณสามารถใช้USER_TABLES
:
SELECT table_name
FROM user_tables
เนื่องจากUSER_TABLES
มีข้อมูลเกี่ยวกับตารางที่คุณเป็นเจ้าของเท่านั้นจึงไม่มีOWNER
คอลัมน์ - คุณเป็นเจ้าของโดยนิยาม
ออราเคิลยังมีจำนวนของข้อมูลเดิมพจนานุกรม views-- TAB
, DICT
, TABS
และCAT
สำหรับ example-- ที่สามารถใช้ โดยทั่วไปแล้วฉันจะไม่แนะนำให้ใช้มุมมองดั้งเดิมเหล่านี้เว้นแต่คุณจะต้องส่งสคริปต์ไปที่ Oracle 6 อย่างแน่นอน Oracle ไม่ได้เปลี่ยนมุมมองเหล่านี้เป็นเวลานานดังนั้นพวกเขามักจะมีปัญหากับวัตถุประเภทใหม่กว่า ตัวอย่างเช่นTAB
และCAT
มุมมองทั้งสองแสดงข้อมูลเกี่ยวกับตารางที่อยู่ในถังรีไซเคิลของผู้ใช้ในขณะที่[DBA|ALL|USER]_TABLES
มุมมองทั้งหมดกรองข้อมูลเหล่านั้นออก CAT
ยังแสดงข้อมูลเกี่ยวกับบันทึกมุมมอง materialized ด้วยTABLE_TYPE
"ตาราง" ซึ่งไม่น่าจะเป็นสิ่งที่คุณต้องการ DICT
รวมตารางและคำพ้องความหมายและไม่บอกคุณว่าใครเป็นเจ้าของวัตถุ
การค้นหาuser_tables
และใช้dba_tables
งานไม่ได้
สิ่งนี้ทำ:
select table_name from all_tables
การก้าวไปอีกขั้นหนึ่งมีมุมมองอื่นที่เรียกว่า cols (all_tab_columns) ซึ่งสามารถใช้เพื่อตรวจสอบว่าตารางใดมีชื่อคอลัมน์ที่กำหนด
ตัวอย่างเช่น:
SELECT table_name, column_name
FROM cols
WHERE table_name LIKE 'EST%'
AND column_name LIKE '%CALLREF%';
เพื่อค้นหาตารางทั้งหมดที่มีชื่อขึ้นต้นด้วย EST และคอลัมน์ที่มี CALLREF ที่ใดก็ได้ในชื่อ
สิ่งนี้สามารถช่วยได้เมื่อทำงานกับคอลัมน์ที่คุณต้องการเข้าร่วมตัวอย่างเช่นขึ้นอยู่กับแบบแผนการตั้งชื่อตารางและคอลัมน์ของคุณ
select * from cols
รับแล้วได้ 0 แถวกลับมา
sqlplus
หากคุณกำลังใช้sqlplus
คุณอาจต้องการตั้งค่าพารามิเตอร์บางอย่างสำหรับการดู nicer ก่อนว่าคอลัมน์ของคุณมีปัญหา (ตัวแปรเหล่านี้ไม่ควรคงอยู่หลังจากที่คุณออกจากsqlplus
เซสชัน):
set colsep '|'
set linesize 167
set pagesize 30
set pagesize 1000
จากนั้นคุณสามารถใช้สิ่งนี้เพื่อดูชื่อตารางทั้งหมด:
SELECT table_name, owner, tablespace_name FROM all_tables;
ตามที่ @Justin Cave กล่าวถึงคุณสามารถใช้สิ่งนี้เพื่อแสดงเฉพาะตารางที่คุณเป็นเจ้าของ:
SELECT table_name FROM user_tables;
โปรดทราบว่า "ตาราง" บางอย่างอาจเป็น "มุมมอง" ดังนั้นคุณจึงสามารถลองใช้งานบางอย่างเช่น:
SELECT view_name FROM all_views;
สิ่งนี้ควรให้สิ่งที่ดูเหมือนยอมรับได้พอสมควร:
pagesize 30
ด้วยpagesize 1000
?
แบบสอบถามอย่างง่ายเพื่อเลือกตารางสำหรับผู้ใช้ปัจจุบัน:
SELECT table_name FROM user_tables;
select object_name from user_objects where object_type='TABLE';
----------------หรือ------------------
select * from tab;
----------------หรือ------------------
select table_name from user_tables;
ลองมุมมองพจนานุกรมข้อมูลด้านล่าง
tabs
dba_tables
all_tables
user_tables
ลองเลือกจากuser_tablesซึ่งแสดงรายการตารางที่ผู้ใช้ปัจจุบันเป็นเจ้าของ
ฐานข้อมูล Oracle เพื่อแสดงชื่อของตารางทั้งหมดโดยใช้แบบสอบถามด้านล่าง
เจ้าของ SELECT, table_name จาก dba_tables; เจ้าของ SELECT, table_name จาก all_tables; SELECT table_name จาก user_tables;
ดูเพิ่มเติมที่: http://www.plsqlinformation.com 2016/08/get-list-of-all-tables-in-oracle.html
ด้วยสิ่งเหล่านี้คุณสามารถเลือก:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE' AND OWNER='SOME_SCHEMA_NAME';
select * from dba_tables
ให้ตารางทั้งหมดของผู้ใช้ทั้งหมดเฉพาะเมื่อผู้ใช้ที่คุณเข้าสู่ระบบมีsysdba
สิทธิ์ใช้งาน
ฉันไม่พบคำตอบที่จะใช้
DBA_ALL_TABLES (ALL_ALL_TABLES/USER_ALL_TABLES)
ตัดสินใจที่จะเพิ่มเวอร์ชันของฉันด้วย มุมมองนี้จะให้ผลตอบแทนมากกว่า DBA_TABLES ในขณะที่ส่งคืนตารางวัตถุเช่นกัน ( http://docs.oracle.com/cd/E11882_01/server.112/e40402/statviews_1003.htm )
คุณสามารถใช้Oracle Data Dictionaryเพื่อรับข้อมูลเกี่ยวกับวัตถุออราเคิล
คุณสามารถรับรายการตารางได้หลายวิธี:
select *
from dba_tables
หรือตัวอย่างเช่น:
select *
from dba_objects
where object_type = 'TABLE'
จากนั้นคุณสามารถรับคอลัมน์ตารางโดยใช้ชื่อตาราง:
select *
from dba_tab_columns
จากนั้นคุณสามารถรับรายการการพึ่งพา (ทริกเกอร์มุมมองและอื่น ๆ ):
select *
from dba_dependencies
where referenced_type='TABLE' and referenced_name=:t_name
จากนั้นคุณสามารถรับข้อความต้นฉบับของวัตถุนี้:
select * from dba_source
และคุณสามารถใช้USER
หรือALL
ดูแทนDBA
หากคุณต้องการ
รวมถึงมุมมอง:
SELECT owner, table_name as table_view
FROM dba_tables
UNION ALL
SELECT owner, view_name as table_view
FROM DBA_VIEWS
เราสามารถรับตารางทั้งหมดรวมถึงรายละเอียดคอลัมน์จากแบบสอบถามด้านล่าง:
SELECT * FROM user_tab_columns;
ด้านล่างนี้เป็นตัวอย่างข้อมูลของแบบสอบถาม SQL ที่อธิบายวิธีตัวเลือกที่คุณสามารถใช้ประโยชน์จาก:
-- 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;
แบบสอบถามต่อไปนี้แสดงรายการข้อมูลที่ต้องการเท่านั้นในขณะที่คำตอบอื่น ๆ ให้ข้อมูลเพิ่มเติมซึ่งทำให้ฉันสับสนเท่านั้น
select table_name from user_tables;
คุณลักษณะใหม่ที่มีอยู่ในSQLcl (ซึ่งเป็นอินเตอร์เฟสบรรทัดคำสั่งฟรีสำหรับฐานข้อมูล Oracle) คือ
Tables
นามแฝง
นี่คือตัวอย่างเล็ก ๆ น้อย ๆ ที่แสดงการใช้งานและแง่มุมเพิ่มเติมของคุณสมบัติ ก่อนอื่นให้เชื่อมต่อกับเซสชันsql
บรรทัดคำสั่ง ( sql.exe
ใน windows) ขอแนะนำให้ป้อนคำสั่งเฉพาะ sqlcl นี้ก่อนเรียกใช้คำสั่งหรือแบบสอบถามอื่นใดที่แสดงข้อมูล
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
..
หากต้องการทราบว่าtables
นามแฝงหมายถึงอะไรคุณสามารถใช้alias list <alias>
SQL> alias list tables
tables - tables <schema> - show tables from schema
--------------------------------------------------
select table_name "TABLES" from user_tables
คุณไม่จำเป็นต้องกำหนดชื่อแทนนี้ตามค่าเริ่มต้นภายใต้ SQLcl หากคุณต้องการแสดงรายการตารางจากสคีมาที่เฉพาะเจาะจงโดยใช้นามแฝงที่ผู้ใช้กำหนดเองใหม่และส่งชื่อสคีมาเป็นอาร์กิวเมนต์การผูกโดยมีเพียงชุดของคอลัมน์ที่จะแสดงคุณอาจทำได้โดยใช้
SQL> alias tables_schema = select owner, table_name, last_analyzed from all_tables where owner = :ownr;
หลังจากนั้นคุณสามารถส่งชื่อสคีมาเป็นอาร์กิวเมนต์ได้
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
..
..
นามแฝงที่กำหนดไว้ล่วงหน้าที่ซับซ้อนยิ่งขึ้นเรียกว่าTables2
ซึ่งจะแสดงคอลัมน์อื่น ๆ
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
หากต้องการทราบว่าแบบสอบถามใดที่ทำงานในพื้นหลังให้ป้อน
alias list tables2
สิ่งนี้จะแสดงคำค้นหาที่ซับซ้อนขึ้นเล็กน้อยพร้อมกับcolumn
คำจำกัดความที่กำหนดไว้ล่วงหน้าซึ่งมักใช้ใน SQL * Plus
Jeff Smithอธิบายเพิ่มเติมเกี่ยวกับนามแฝงที่นี่
ฉันต้องการได้รับรายชื่อคอลัมน์ทั้งหมดที่อยู่ในตารางของ schema เรียงตามลำดับของ id คอลัมน์
นี่คือแบบสอบถามที่ฉันใช้: -
SELECT COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE OWNER = 'schema_owner_username' AND TABLE_NAME='table_name'
ORDER BY COLUMN_ID ASC;
แน่นอนว่ามันเป็นไปได้ที่จะมีรายการของตารางผ่านการสืบค้น SQL เป็นไปได้ที่จะทำเช่นนั้นผ่านเครื่องมือที่อนุญาตให้สร้างพจนานุกรมข้อมูลเช่นERWIN , Toad Data ModelerหรือERBuilder ERBuilderด้วยเครื่องมือเหล่านี้นอกเหนือจากชื่อตารางคุณจะมีฟิลด์ประเภทของวัตถุเช่น (ทริกเกอร์ลำดับโดเมนมุมมอง ... )
ด้านล่างขั้นตอนในการปฏิบัติตามเพื่อสร้างคำนิยามตารางของคุณ:
ฐานข้อมูลของคุณจะปรากฏในซอฟต์แวร์เป็นแผนภาพความสัมพันธ์ของเอ็นติตี้
select * from all_all_tables
ส่วนเพิ่มเติม 'ทั้งหมด' ที่จุดเริ่มต้นให้คอลัมน์เพิ่มเติมอีก 3 คอลัมน์คือ:
OBJECT_ID_TYPE
TABLE_TYPE_OWNER
TABLE_TYPE
SHOW TABLES
ใน MySQL หรือไม่