2016-06-21 3 views
0

Мне нужно изменить таблицу, чтобы удалить ограничение первичного ключа, единственная проблема заключается в том, что таблица генерируется другой системой, и у меня нет имени ограничения. Итак, как обходной путь, я создал следующий скрипт, который, как я думал, должен работать, но это не так, так что кто-нибудь может помочь мне написать другой скрипт, который будет работать.изменить сценарий таблицы в оракуле на основе условия выбора

ALTER TABLE temp 
MODIFY CONSTRAINT (select constraint_name 
        FROM all_constraints 
        WHERE owner like '%tempUser%' and 
         table_name like '%temp%' and 
         constraint_type = 'P' 
       ) 
DISABLE; 

У меня возникает следующая ошибка при попытке запустить.

Ошибка SQL: ORA-14006: неправильное имя раздела 14006. 00000 - «недопустимое имя раздела» * Причина: имя раздела в форме ожидается, но нет. * Действие: введите соответствующее имя раздела.

Я пробовал выполнить код, основанный на предлагаемой ссылке, и он запускается без каких-либо ошибок, но не устраняет ограничение.

BEGIN 
    FOR c IN 
    (SELECT c.owner, c.table_name, c.constraint_name 
    FROM all_constraints c 
    where owner like '%tempUser%' and table_name like '%temp%' and constraint_type = 'P') 
    LOOP 
    dbms_utility.exec_ddl_statement('alter table ' || c.table_name || ' modify CONSTRAINT ' || c.constraint_name || ' disable '); 
    END LOOP; 
END; 
/
+0

Что не работает из этого сценария? Это ошибка? Это поможет найти ответ. – Steven

+1

Возможный дубликат [Отключить все ограничения таблиц в Oracle] (http://stackoverflow.com/questions/128623/disable-all-table-constraints-in-oracle) – mustaccio

ответ

1

Вы можете использовать динамический SQL для решения этой проблемы. Сначала найдите имя своего ограничения, а затем создайте динамический код, чтобы отключить его.

Посмотрите Disable all table constraints in Oracle, который похож

Смежные вопросы