Вам не нужно использовать динамический запрос c в блоке 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>