Учитывая имя таблицы и имя столбца, я пытаюсь динамически удалить ограничение Oracle, которое я не знаю заранее.
Я могу найти имя ограничения с этим запросом:
SELECT CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'MyTable' AND
COLUMN_NAME='MyColumn' AND POSITION IS NULL
Моя первая мысль заключалась в использовании подзапроса, но это не работает и приводит к ошибке ORA-02250:
ALTER TABLE MyTable
DROP CONSTRAINT (
SELECT CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'MyTable' AND
COLUMN_NAME='MyColumn' AND POSITION IS NULL)
До сих пор единственным рабочим решением, которое у меня было, является следующее, но оно кажется излишне сложным:
DECLARE
statement VARCHAR2(2000);
constr_name VARCHAR2(30);
BEGIN
SELECT CONSTRAINT_NAME INTO constr_name
FROM USER_CONS_COLUMNS
WHERE table_name = 'MyTable' AND
column_name = 'MyColumn' AND position is null;
statement := 'ALTER TABLE MyTable DROP CONSTRAINT '|| constr_name;
EXECUTE IMMEDIATE(statement);
END;
/
Есть ли способ сделать это с помощью подзапроса, как я и предполагал? Если нет, может ли кто-нибудь предложить более сжатый способ сделать это?