给定一个表名和一个列名,我试图动态地删除一个我不知道名字的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; /
有没有办法用一个子查询来做到这一点,正如我原来的意图一样?如果没有,任何人都可以建议一个更简洁的方式来做到这一点?