Учитывая имя таблицы и имя столбца, я пытаюсь динамически отбросить ограничение 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;
/
Есть ли способ сделать это с подзапросом, как я изначально планировал?Если нет, может кто-нибудь предложить более краткий способ сделать это?