SQL: изменение таблиц, возвращаемых из оператора выбора - PullRequest
0 голосов
/ 13 марта 2020

Как изменить таблицы и удалить ограничения, возвращаемые как строки из оператора Select?

Допустим, у меня есть база данных, которая содержит таблицы: tblA, tblB, tbl C и другие. Если я запускаю запрос для выбора таблиц, которые соответствуют определенным критериям, он возвращает следующее:

+------------+------------+
| table_name | constraints|
+------------+------------+
| tblA       | consX      |
+------------+------------+
| tblB       | consY      |
+------------+------------+
| tblC       | consZ      |
+------------+------------+

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

alter table tblA drop constraint consX; 
alter table tblB drop constraint consY;
alter table tblC drop constraint consZ;

Как я могу выполнить все эти шаги в одном запросе?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Используя PL / SQL, я бы сделал что-то вроде этого:

DECLARE
  CURSOR c_query IS --REPLACE THIS WITH YOUR ACTUAL QUERY
    SELECT tableName, conName
    FROM dual;
BEGIN
  FOR rec IN c_query LOOP
    EXECUTE IMMEDIATE 'ALTER TABLE '||rec.tableName||' DROP CONSTRAINT '||rec.conName;
  END LOOP;
END;
/
0 голосов
/ 13 марта 2020

Вы можете сделать что-то вроде этого:

with table_list as
( select 'Foo1' tname from dual
  union
  select 'Foo2' tname from dual
)
select 'alter table ' || tname || ' drop constraint ' || constraint_name || ';'
from user_constraints, table_list
where user_constraints.table_name = tname;

, это создаст строку, созданную как оператор alter для каждой таблицы / ограничения. Добавьте имена таблиц для запроса в предложении WITH. Обратите внимание, что USER_CONSTRAINTS перечисляет только ограничения для текущей схемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...