2016-03-10 8 views
-1
SELECT 'ALTER TABLE ' || uc.table_name || ' DROP CONSTRAINT ' || uc.constraint_name FROM user_constraints uc WHERE constraint_type = 'R'; 

возвращает то есть некоторые заявления, которые я могу выполнять вручную, как:Oracle: Выполнить запрос из выбранной строки

ALTER TABLE APPLICATIONUSERROLE DROP CONSTRAINT APP_APPUSERROLE_FK1      
ALTER TABLE APPLICATIONUSERROLE DROP CONSTRAINT USER_APPUSERROLE_FK1      
ALTER TABLE APPLICATIONUSERROLE DROP CONSTRAINT ROLE_APPUSERROLE_FK1 

Что я должен сделать, чтобы выполнить их автоматически?

Например, я попробовал:

EXECUTE IMMEDIATE (SELECT 'ALTER TABLE ' || uc.table_name || ' DROP CONSTRAINT ' || uc.constraint_name FROM user_constraints uc WHERE constraint_type = 'R'); 

но то не работает вообще бросали какие-то ошибки.

Заранее спасибо.

ответ

0
begin 
    for i in (SELECT 'ALTER TABLE ' || uc.table_name || ' DROP CONSTRAINT ' || uc.constraint_name as sql_text FROM user_constraints uc WHERE constraint_type = 'R') 
    loop 
     execute immediate i.sql_text; 
    end loop; 
end; 
+0

спасибо, но выбрасывает: PLS-00103: Встретил символ «SQL» – Powerslave

+0

Я отредактировал сообщение. попробуйте использовать псевдоним sql_text вместо sql – SkyWalker

+0

спасибо, теперь бросает: PLS-00302: должен быть объявлен компонент «sql_text»;) – Powerslave

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

  • Нет связанных вопросов^_^