У меня есть локальная таблица, которая включает в себя несколько столбцов. Некоторые из этих столбцов заполнены, некоторые пустые
Они состоят из метаданных других таблиц, таких как:
SCHEMA TABLE_NAME DRIVER_TABLE JOIN_COND_1 JOIN_COND_2
Вот пример того, как могут выглядеть некоторые фиктивные данные:
SCHEMA TABLE_NAME DRIVER_TABLE JOIN_COND_1 JOIN_COND_2
BOB TRUCKS NULL NULL NULL
BOB VANS USER.XXX A.ID=B.ID NULL
BOB CARS USER.XXX A.ID=B.ID B.END_DTE >= '01-DEC-2018'
Причина, по которой таблица существует, заключается в создании средства для подсчета строк в другой базе данных.
Мне нужно найти способ, с помощью которого я могу получить вывод, подобный следующему, используя таблицу:
SCHEMA TABLE_NAME COUNT
BOB TRUCKS 878908
BOB VANS 7899
BOB CARS 876
Таблица метаданных будет источником запроса, но запрос должен быть в одном блоке кода. Я не уверен, с чего начать.
Таблица драйверов представляет собой список идентификаторов, ограничивающих количество, и используется только в том случае, если она там есть.
Итак, в первой строке, где нет «таблицы драйверов», просто NULL будет просто:
Select SCHEMA, TABLE_NAME, count(*) COUNT from METADATA;
Второй запрос должен использовать таблицу драйверов и присоединиться:
Select SCHEMA, TABLE_NAME, count(*) COUNT from METADATA A, USER.XXX B
WHERE A.ID=B.ID;
И третий запрос будет:
Select SCHEMA, TABLE_NAME, count(*) COUNT from METADATA A, USER.XXX B
WHERE A.ID=B.ID
AND B.END_DTE >= '01-DEC-2018';
Итак, весь этот sql должен быть построен из того, что находится в столбцах метаданных.
Я думал о какой-то группе циклов, основанной на том, чтобы получить столбцы в переменные
и затем сформируйте логическую схему if, then, else.
DECLARE
l_sql_1 VARCHAR2(100);
l_sql_2 VARCHAR2(100);
l_sql_3 VARCHAR2(100);
l_sql_4 VARCHAR2(100);
BEGIN
l_sql_1 := 'SELECT SCHEMA||'.'||TABLE_NAME FROM METADATA';
l_sql_2 := 'SELECT DRIVER_TABLE FROM METADATA';
l_sql_3 := 'SELECT JOIN_COND_1 FROM METADATA';
l_sql_4 := 'SELECT JOIN_COND_2 FROM METADATA';
У кого-нибудь есть идеи, как мне это сделать, пожалуйста?