Процедура pl / sql для создания представления как выбор max, min из всех столбцов - PullRequest
0 голосов
/ 01 ноября 2018

Я хочу создать процедуру pl / sql для создания представлений, содержащих значения max и min каждого столбца каждой таблицы каждой схемы в моей БД. чтобы сравнить данные между старой БД rdb и новой БД Oracle. у кого-нибудь есть идея?

1 Ответ

0 голосов
/ 02 ноября 2018

Это было бы немного динамического SQL, выбирая информацию из USER_TABLES и USER_TAB_COLUMNS.

Вот пример, основанный на схеме Скотта и ее таблицах DEPT и SALGRADE. Вы удалили (или изменили) предложение WHERE из CUR_T цикла курсора.

SQL> declare
  2    l_str varchar2(2000);
  3  begin
  4    for cur_t in (select table_name
  5                  from user_tables
  6                  where table_name in ('DEPT', 'SALGRADE')
  7                 )
  8    loop
  9
 10      l_str := 'create or replace view v_'  || cur_t.table_name  ||' as select ';
 11
 12      for cur_c in (select column_name
 13                    from user_tab_columns
 14                    where table_name = cur_t.table_name
 15                   )
 16      loop
 17        l_str := l_str ||
 18        ' min('  || cur_c.column_name ||') ' || cur_c.column_name ||'_min, ' ||
 19        ' max('  || cur_c.column_name ||') ' || cur_c.column_name ||'_max, ';
 20      end loop;
 21
 22      l_str := rtrim(l_str, ', ') || ' from ' || cur_t.table_name;
 23
 24      dbms_output.put_line(l_str);
 25      execute immediate(l_str);
 26    end loop;
 27  end;
 28  /

PL/SQL procedure successfully completed.

SQL>
SQL> select * from v_dept;

DEPTNO_MIN DEPTNO_MAX DNAME_MIN      DNAME_MAX      LOC_MIN       LOC_MAX
---------- ---------- -------------- -------------- ------------- -------------
        10         40 ACCOUNTING     SALES          BOSTON        NEW YORK

SQL> select * from v_salgrade;

 GRADE_MIN  GRADE_MAX  LOSAL_MIN  LOSAL_MAX  HISAL_MIN  HISAL_MAX
---------- ---------- ---------- ---------- ---------- ----------
         1          5        700       3001       1200       9999

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