ฉันจะแสดงรายการตารางทั้งหมดในสคีมาใน Oracle SQL ได้อย่างไร
ฉันจะแสดงรายการตารางทั้งหมดในสคีมาใน Oracle SQL ได้อย่างไร
คำตอบ:
หากต้องการดูตารางทั้งหมดในสคีมาอื่นคุณต้องมีสิทธิ์ระบบอย่างน้อยหนึ่งอย่างต่อไปนี้:
SELECT ANY DICTIONARY
(SELECT | INSERT | UPDATE | DELETE) ANY TABLE
หรือบทบาทใหญ่ของ DBA
ด้วยสิ่งเหล่านี้คุณสามารถเลือก:
SELECT DISTINCT OWNER, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
หากไม่มีสิทธิ์ระบบเหล่านั้นคุณจะเห็นเฉพาะตารางที่คุณได้รับสิทธิ์การเข้าถึงระดับหนึ่งไม่ว่าโดยตรงหรือผ่านบทบาท
SELECT DISTINCT OWNER, OBJECT_NAME
FROM ALL_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
AND OWNER = '[some other schema]'
สุดท้ายคุณสามารถสืบค้นพจนานุกรมข้อมูลสำหรับตารางของคุณเองได้ตลอดเวลาเนื่องจากสิทธิ์ในตารางของคุณไม่สามารถเพิกถอนได้ (ตั้งแต่ 10 กรัม):
SELECT DISTINCT OBJECT_NAME
FROM USER_OBJECTS
WHERE OBJECT_TYPE = 'TABLE'
DISTINCT
ในแบบสอบถาม owner, object_name
ไม่ซ้ำกันในALL_OBJECTS
owner, object_name
ไม่ได้มีลักษณะเฉพาะใน dba_objects แพ็กเกจแพ็กเกจและแพ็กเกจทั้งสองปรากฏในมุมมองนั้นและตารางและดัชนีอยู่ในเนมสเปซที่แตกต่างกัน
SELECT table_name from all_tables where owner = 'YOURSCHEMA';
คุณสามารถสอบถาม USER_TABLES
select TABLE_NAME from user_tables
หากคุณเข้าสู่ระบบในฐานะผู้ใช้ปกติโดยไม่ได้รับอนุญาต DBA คุณสามารถใช้คำสั่งต่อไปนี้เพื่อดูตารางและมุมมองทั้งหมดของสคีมาของคุณเอง
select * from tab;
ลองใช้สิ่งนี้แทนที่หรือไม่ ด้วยชื่อสคีของคุณ
select TABLE_NAME from INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =?
AND TABLE_TYPE = 'BASE TABLE'
หากคุณกำลังเข้าถึง Oracle ด้วย JDBC (Java) คุณสามารถใช้DatabaseMetadataคลาสหากคุณเข้าถึง Oracle ด้วย ADO.NET คุณสามารถใช้แนวทางที่คล้ายกันได้
หากคุณกำลังเข้าถึง Oracle ด้วย ODBC คุณสามารถใช้ฟังก์ชันSQLTables
มิฉะนั้นถ้าคุณต้องการข้อมูลใน SQLPlus หรือไคลเอนต์ Oracle ที่คล้ายกันหนึ่งในแบบสอบถามที่กล่าวถึงแล้วจะทำ ตัวอย่างเช่น
select TABLE_NAME from user_tables
select * from cat;
มันจะแสดงตารางทั้งหมดในคำเหมือนแมว schema ของคุณ user_catalog
select TABLE_NAME from user_tables;
แบบสอบถามด้านบนจะให้ชื่อของตารางทั้งหมดที่มีในผู้ใช้นั้น
select * from user_tables;
(แสดงตารางทั้งหมด)
SELECT table_name, เจ้าของจาก all_tables โดยที่ owner = 'schema_name' สั่งซื้อโดย table_name
คุณสามารถเรียกใช้คิวรีที่สองโดยตรงหากคุณรู้จักชื่อเจ้าของ
- ก่อนอื่นคุณสามารถเลือกสิ่งที่เจ้าของทั้งหมดมีอยู่:
SELECT DISTINCT(owner) from SYS.ALL_TABLES;
- จากนั้นคุณสามารถดูตารางภายใต้โดยเจ้าของที่:
SELECT table_name, owner from all_tables where owner like ('%XYZ%');
ดูยูทิลิตี้ง่าย ๆของฉันเพื่อแสดงข้อมูลเกี่ยวกับ db schema มันขึ้นอยู่กับ: Reverse Engineering เป็นตัวแบบข้อมูลโดยใช้ Oracle Data Dictionary
หากคุณต้องการขนาดของโต๊ะเช่นกันสิ่งนี้จะเป็นประโยชน์:
select SEGMENT_NAME, PARTITION_NAME, BYTES from user_segments where SEGMENT_TYPE='TABLE' order by 1
ชื่อของตัวนับตารางและแถวสำหรับตารางทั้งหมดภายใต้OWNER
สคีมา:
SELECT table_name, num_rows counter from DBA_TABLES WHERE owner = 'OWNER'
%_OBJECTS
%_TABLES