2016-04-13 2 views
0

У меня есть пара QA-столбцов в каждой таблице моей базы данных Oracle, которую я хочу ежедневно обновлять со значением имени пользователя, который вставил/обновил объект. Я могу обновить столбец вручную на столе, как:Обновление столбца в нескольких таблицах с помощью цикла

UPDATE TEST.TABLE1 TB 
SET TB.ADDED_BY2 = 
(
select IA.FULL_NAME 
from ISM.APP_USER IA 
where IA.NAME = UPPER(TB.ADDED_BY) 
), 
TB.CHANGED_BY2 = 
(
select IA.FULL_NAME 
from ISM.APP_USER IA 
where IA.NAME = UPPER(TB.CHANGED_BY) 
) 
where TO_CHAR(CREATION_DATUM, 'YYYY-MM-DD') = TO_CHAR(SYSDATE) AND ADDED_BY2 IS NULL; 

Но обновить тот же столбец в 25 таблицах является утомительной (и скучной) работой. Возникает вопрос: существует ли необходимость обновлять столбцы в 25 таблицах с помощью LOOP (или любого другого метода)?

Моя ultimage цель состоит в том, чтобы сделать что-то как следующее:

FOR I IN SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME IN ('TEST.TABLE1', 'TEST.TABLE2') 

LOOP 

UPDATE I.TABLE_NAME TB 
SET TB.ADDED_BY2 = 
(
select IA.FULL_NAME 
from ISM.APP_USER IA 
where IA.NAME = UPPER(TB.ADDED_BY) 
), 
TB.CHANGED_BY2 = 
(
select IA.FULL_NAME 
from ISM.APP_USER IA 
where IA.NAME = UPPER(TB.CHANGED_BY) 
) 
where TO_CHAR(CREATION_DATUM, 'YYYY-MM-DD') = TO_CHAR(SYSDATE) AND ADDED_BY2 IS NULL; 

END LOOP; 

ответ

0

Вам необходимо использовать динамический SQL:

FOR I IN SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME IN ('TEST.TABLE1', 'TEST.TABLE2') 

LOOP 
execute immediate 
    'UPDATE ' || I.TABLE_NAME || ' TB 
    SET TB.ADDED_BY2 = 
    (
    select IA.FULL_NAME 
    from ISM.APP_USER IA 
    where IA.NAME = UPPER(TB.ADDED_BY) 
    ), 
    TB.CHANGED_BY2 = 
    (
    select IA.FULL_NAME 
    from ISM.APP_USER IA 
    where IA.NAME = UPPER(TB.CHANGED_BY) 
    ) 
    where TO_CHAR(CREATION_DATUM, ''YYYY-MM-DD'') = TO_CHAR(SYSDATE) 
    AND ADDED_BY2 IS NULL'; 

END LOOP; 

Таким образом, вы динамически создать оператор SQL, основанный на различной таблице имя и выполнить его;

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

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