Как проверить, все ли таблицы в базе данных изменены после выполнения операции Обновления для столбцов таблиц? - PullRequest
0 голосов
/ 27 февраля 2020

Мне нужно обновить все таблицы с именем столбца, например «% DIV%», значением DD, где бы оно ни было, я написал сценарий для него, но я не понимаю, как проверить, что столбцы все таблицы обновляются до значения DD после выполнения действия. Я написал этот запрос.

SELECT 'SELECT '||OWNER||'.'||TABLE_NAME||', '||COLUMN_NAME||' FROM '||OWNER||'.'||TABLE_NAME||' WHERE '||COLUMN_NAME||' = ''MG'' ;'
FROM RADHA.CHANGE_TABLE
WHERE VALID_FLAG='Y'

Я планировал создать структуру таблицы, такую ​​как

OWNER  TABLE_NAME  PREV_COUNT  

. PREV_COUNT будет содержать количество строк, имеющих значение столбца в качестве MG, и после действия В следующем запросе я проверю, были ли соответствующие строки обновлены до DD.

SELECT 'SELECT '||OWNER||'.'||TABLE_NAME||', '||COLUMN_NAME||' FROM '||OWNER||'.'||TABLE_NAME||' WHERE '||COLUMN_NAME||' = ''DD'' ;' FROM RADHA.CHANGE_TABLE WHERE VALID_FLAG='Y'

И результат этого запроса будет go в таблицу

 OWNER  TABLE_NAME  NEW_COUNT

Но Я не могу получить способ извлечения записей из запроса Select, так как это строка, которая записана в запросе select, но я хочу, чтобы набор результатов был таким, чтобы я мог вставить записи в мою таблицу, упомянутую выше, пожалуйста, объясните, как подойти далее

1 Ответ

1 голос
/ 27 февраля 2020

У меня нет ваших таблиц, но - на основе образца схемы Скотта, вот скрипт, который ищет во всех своих таблицах столбец с именем JOB (строка # 8) и проверяет, сколько из них имеет значение, которое выглядит как (подсказка: like) CLERK в нем (строка № 12).

Посмотрите, как это работает, настройте его так, чтобы оно работало для вас.

SQL> DECLARE
  2    l_str VARCHAR2(500);
  3    l_cnt NUMBER := 0;
  4  BEGIN
  5    FOR cur_r IN (SELECT u.table_name, u.column_name
  6                  FROM user_tab_columns u, user_tables t
  7                  WHERE u.table_name = t.table_name
  8                    AND u.column_name = 'JOB'
  9                                                              )
 10    LOOP
 11      l_str := 'SELECT COUNT(*) FROM ' || cur_r.table_name ||
 12               ' WHERE ' || cur_r.column_name || ' like (''%CLERK%'')';
 13
 14      EXECUTE IMMEDIATE (l_str) INTO l_cnt;
 15
 16      IF l_cnt > 0 THEN
 17         dbms_output.put_line(l_cnt ||' : ' || cur_r.table_name);
 18      END IF;
 19    END LOOP;
 20  END;
 21  /
4 : EMP        --> there are 4 CLERKs in the EMP table

PL/SQL procedure successfully completed.

SQL>
...