Я хотел бы узнать, что имена таблиц, содержащие значение, относятся к определенному диапазону дат в разработчике oracle SQL.
Точнее, таблицы в базе данных имеют одни и те же столбцы с именами MODIFY_DATE
. Во-первых, я должен найти последние MODIFY_DATE
каждой таблицы среди всех записей и посмотреть, не превышает ли этот MODIFY_DATE
60 дней с сегодняшнего дня.
Если это так, я должен включить его, чтобы получить результат с двумя столбцами: Table_name
и MODIFY_DATE
.
Мой ожидаемый результат таков.
Кто-нибудь знает инструкцию PL/SQL для этого?
Спасибо огромное!
1 ответ
Вам не нужно использовать динамический запрос в блоке PL/SQL. Это может быть достигнуто с помощью XMLQUERY
следующим образом:
SELECT * FROM
(select table_name, DATE'1900-01-01' +
TO_NUMBER(xmlquery('/ROWSET/ROW/C/text()'
passing xmltype(dbms_xmlgen.getxml(
'select max(' || column_name || ' - DATE''1900-01-01'') as c '
|| 'from "' || table_name || '" WHERE MODIFY_DATE >= trunc(SYSDATE) - 60')) -- name of the column here
returning content)) as modify_date
from user_tab_columns
where column_name = 'MODIFY_DATE') -- name of the column here
WHERE modify_date IS NOT NULL;
Я протестировал код в своей локальной БД, используя START_DATE
в качестве имени столбца и 1000 дней в качестве ограничения, чтобы показать пример.
SQL> SELECT * FROM
2 (select table_name, DATE'1900-01-01' +
3 TO_NUMBER(xmlquery('/ROWSET/ROW/C/text()'
4 passing xmltype(dbms_xmlgen.getxml(
5 'select max(' || column_name || ' - DATE''1900-01-01'') as c '
6 || 'from "' || table_name || '" WHERE START_DATE >= trunc(SYSDATE) - 1000'))
7 returning content)) as modify_date
8 from user_tab_columns
9 where column_name = 'START_DATE')
10 WHERE modify_date IS NOT NULL;
TABLE_NAME MODIFY_DA
--------------- ---------
ACTIVE_USERS 21-NOV-19
YOUR_TABLE 03-JAN-20
SQL>
all_tab_columns
, а также || 'from "' || table_name || '" WHERE
следует заменить на || 'from "' || owner || '"."' || table_name || '" WHERE
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.