Отображение имен всех ограничений для таблицы в Oracle SQL

115

Я определил имя для каждого ограничения для нескольких таблиц, которые я создал в Oracle SQL.

Проблема в том, что для удаления ограничения для столбца конкретной таблицы мне нужно знать имя, которое я указал для каждого ограничения, которое я забыл.

Как мне перечислить все имена ограничений, которые я указал для каждого столбца таблицы?

Есть ли для этого какой-либо оператор SQL?

Джерис Алан
источник

Ответы:

160

Вам нужно запросить словарь данных , в частности USER_CONS_COLUMNSпредставление, чтобы увидеть столбцы таблицы и соответствующие ограничения:

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

К вашему сведению, если вы специально не создали свою таблицу с именем в нижнем регистре (с использованием двойных кавычек), тогда имя таблицы будет по умолчанию в верхнем регистре, поэтому убедитесь, что это так в вашем запросе.

Если вы хотите увидеть больше информации о самом ограничении, запросите 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>'
Олли
источник
Опечатка:USER_CONS_COLUMNS
Пол Дрейпер
3
Я думаю, <имя вашей таблицы> чувствительно к регистру; Это должно быть в верхнем регистре.
Канагавелу Сугумар
ownerПоле в обоих (пользователей | все | дБА) _constraints и (пользователь | все | дБА) _cons_columns является владельцем ограничения, не является владельцем таблицы (в документации Oracle). Владелец таблицы не является доступным полем ни в одном из этих представлений. Означает ли это, что владелец ограничения и владелец таблицы должны быть одним и тем же?
Дэвид Флетчер
14
SELECT * FROM USER_CONSTRAINTS
Paciv
источник
2
Это не даст вам название столбца
Джаспер де Фрис
Use all_constraints
Sandip Nirmal
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';
Раймонд Вачага
источник