Відобразити імена всіх обмежень для таблиці в 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

додавання до пункту де:

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

Друкарня:USER_CONS_COLUMNS
Пол Дрейпер,

3
<ваше ім'я таблиці>, я думаю, що регістр, я думаю; Це має бути у верхньому регістрі.
Канагавелу Сугумар

ownerПоле в обох (користувачів | все | дБА) _constraints і (користувач | все | дБА) _cons_columns є власником обмеження, не є власником таблиці (в документації Oracle). Власник таблиці не є доступним полем в жодному з цих представлень. Чи означає це, що власник обмеження та власник таблиці повинні бути однаковими?
Девід Флетчер


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;


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';
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.