oracle процедура для перечисления имен таблиц и соответствующего количества - PullRequest
0 голосов
/ 17 июня 2020

У меня возникла проблема. У меня есть таблица с названием gd_table_order, которая содержит имена таблиц. И мне нужно получить table_name и количество каждой таблицы до целевой. target - это представление.

gd_table_order

Я привел только пример с 2 столбцами, таких столбцов 10, поэтому в процедуре нам нужно ввести это как параметр.

И будет создано 10 соответствующих представлений. ниже приведен образец из 2 представлений.

V_CHECK_RECORDS_AUS

V_CHECK_RECORDS_BEL

V_CHECK_RECORDS_ * - вид вывода имя

Не могли бы вы помочь?

Sample Data

1 Ответ

1 голос
/ 17 июня 2020

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

SQL> -- This is sample data
SQL> WITH SAMPLE_DATA(TNAME) AS
  2  (SELECT 'CUSTOMERS' FROM DUAL UNION ALL
  3  SELECT 'INTERVAL_TAB' FROM DUAL)
  4  -- Your query starts from here
  5  SELECT TABLE_NAME,
  6         TO_NUMBER(
  7         EXTRACTVALUE( XMLTYPE(
  8         DBMS_XMLGEN.GETXML('select count(*) c from ' || U.TABLE_NAME)
  9         ), '/ROWSET/ROW/C')) COUNT
 10    FROM USER_TABLES U JOIN SAMPLE_DATA S ON S.TNAME = U.TABLE_NAME;

TABLE_NAME           COUNT
--------------- ----------
CUSTOMERS                1
INTERVAL_TAB             0

SQL>

- Обновить

Вы можете сгенерировать представление следующим образом:

- ОБНОВЛЕНО ЭТОТ РАЗДЕЛ

CREATE OR REPLACE VIEW V_CHECK_RECORDS_AUS AS
SELECT TABLE_NAME,
       TO_NUMBER(
           EXTRACTVALUE( XMLTYPE(
                   DBMS_XMLGEN.GETXML('select count(*) c from ' 
                      || U.TABLE_NAME || ' WHERE oe_name=''BUL''')
               ), '/ROWSET/ROW/C')) NUM_ROWS
  FROM USER_TAB_COLUMNS U JOIN GD_TABLE_ORDER S ON S.TABLE_NAME_AUS = U.TABLE_NAME 
 WHERE U.COLUMN_NAME = 'OE_NAME';

Таким же образом вы можете сгенерировать другие представления.

- Дальнейшее обновление

CREATE OR REPLACE VIEW V_CHECK_RECORDS_AUS AS
SELECT TABLE_NAME,
       CASE WHEN U.COLUMN_NAME IS NOT NULL THEN TO_NUMBER(
           EXTRACTVALUE( XMLTYPE(
                   DBMS_XMLGEN.GETXML('select count(*) c from ' 
                      || U.TABLE_NAME || ' WHERE ' || U.COLUMN_NAME || '=''BUL''')
               ), '/ROWSET/ROW/C')) 
         ELSE 0 END NUM_ROWS
  FROM GD_TABLE_ORDER S LEFT JOIN USER_TAB_COLUMNS U 
  ON S.TABLE_NAME_AUS = U.TABLE_NAME AND U.COLUMN_NAME = 'OE_NAME';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...