แสดงชื่อของข้อ จำกัด ทั้งหมดสำหรับตารางใน Oracle SQL


115

ฉันได้กำหนดชื่อสำหรับแต่ละข้อ จำกัด สำหรับหลายตารางที่ฉันสร้างใน Oracle SQL

ปัญหาคือการที่จะวางข้อ จำกัด สำหรับคอลัมน์ของตารางใดตารางหนึ่งฉันจำเป็นต้องรู้ชื่อที่ฉันให้ไว้สำหรับข้อ จำกัด แต่ละข้อซึ่งฉันลืมไปแล้ว

ฉันจะแสดงชื่อของข้อ จำกัด ทั้งหมดที่ฉันระบุไว้สำหรับแต่ละคอลัมน์ของตารางได้อย่างไร

มีคำสั่ง SQL สำหรับการทำเช่นนั้นหรือไม่?

คำตอบ:


160

คุณต้องค้นหาพจนานุกรมข้อมูลโดยเฉพาะUSER_CONS_COLUMNSมุมมองเพื่อดูคอลัมน์ตารางและข้อ จำกัด ที่เกี่ยวข้อง:

SELECT *
  FROM user_cons_columns
 WHERE table_name = '<your table name>';

FYI เว้นแต่คุณจะสร้างตารางของคุณโดยเฉพาะด้วยชื่อตัวพิมพ์เล็ก (โดยใช้เครื่องหมายคำพูดคู่) ชื่อตารางจะถูกตั้งค่าเริ่มต้นเป็นตัวพิมพ์ใหญ่ดังนั้นให้แน่ใจว่าเป็นเช่นนั้นในแบบสอบถามของคุณ

หากคุณต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับข้อ จำกัด ให้สอบถามUSER_CONSTRAINTSมุมมอง:

SELECT *
  FROM user_constraints
 WHERE table_name = '<your table name>'
   AND constraint_name = '<your constraint name>';

หากตารางถูกเก็บไว้ในสคีมาที่ไม่ใช่สคีมาเริ่มต้นของคุณคุณอาจต้องแทนที่มุมมองด้วย:

all_cons_columns

และ

all_constraints

เพิ่มไปที่ประโยค where:

   AND owner = '<schema owner of the table>'

Typo:USER_CONS_COLUMNS
Paul Draper

3
ฉันคิดว่า <ชื่อตารางของคุณ> เป็นกรณีที่สำคัญ; ควรเป็นตัวพิมพ์ใหญ่
Kanagavelu Sugumar

ownerข้อมูลทั้งใน (ผู้ใช้ | ทั้งหมด | DBA) _constraints และ (ผู้ใช้ | ทั้งหมด | DBA) _cons_columns เป็นเจ้าของข้อ จำกัด ที่ไม่ได้เป็นเจ้าของของตาราง (ต่อเอกสารของ Oracle) เจ้าของตารางไม่ใช่ฟิลด์ที่พร้อมใช้งานในมุมมองใดมุมมองหนึ่งเหล่านี้ นี่หมายความว่าเจ้าของข้อ จำกัด และเจ้าของตารางต้องเหมือนกันหรือไม่?
David Fletcher


11

สิ่งนี้อาจช่วยได้:

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";

ไชโย


8
select constraint_name,constraint_type 
from user_constraints
where table_name = 'YOUR TABLE NAME';

หมายเหตุ: ชื่อตารางควรเป็นตัวพิมพ์ใหญ่

ในกรณีที่คุณไม่ทราบชื่อตาราง

select constraint_name,constraint_type,table_name 
from user_constraints;

4

บ่อยครั้งที่ฐานข้อมูลขององค์กรมีผู้ใช้หลายคนและฉันไม่ได้ใช้ฐานข้อมูลที่ถูกต้อง:

SELECT * FROM ALL_CONSTRAINTS WHERE table_name = 'YOUR TABLE NAME' ;

เลือกจากเอกสาร Oracle


0

ใช้คำสั่งอย่างใดอย่างหนึ่งจากสองคำสั่งด้านล่าง ทุกอย่างต้องเป็นตัวพิมพ์ใหญ่ ชื่อตารางต้องอยู่ในเครื่องหมายคำพูด:

--SEE THE CONSTRAINTS ON A TABLE
SELECT COLUMN_NAME, CONSTRAINT_NAME FROM USER_CONS_COLUMNS WHERE TABLE_NAME = 'TBL_CUSTOMER';

--OR FOR LESS DETAIL
SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME = 'TBL_CUSTOMER';
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.