Ниже приведен код, который вы ищете. Я использовал представление USER_TAB_COLUMNS, чтобы рассматривать только таблицы, принадлежащие вашей схеме, в которой вы выполняете код.
Не стесняйтесь форматировать вывод в соответствии с вашими потребностями.
SET SERVEROUT ON
DECLARE
LV_QUERY VARCHAR2(32767);
LV_RESULT VARCHAR2(32767);
BEGIN
DBMS_OUTPUT.PUT_LINE('---------------------------------------');
DBMS_OUTPUT.PUT_LINE('---------------------------------------');
FOR I IN (
SELECT
C.TABLE_NAME,
LISTAGG(C.COLUMN_NAME, ' || ''****'' || ') WITHIN GROUP(
ORDER BY
C.COLUMN_ID
) COLS
FROM
USER_TAB_COLUMNS C
GROUP BY
C.TABLE_NAME
ORDER BY
1
) LOOP
LV_QUERY := 'SELECT '
|| q'#RTRIM(XMLAGG(XMLELEMENT(E,VALS,CHR(10)).EXTRACT('//text()') ORDER BY 1).GetClobVal(),CHR(10)) FROM#'
|| '(SELECT '
|| I.COLS
|| ' AS VALS FROM '
|| I.TABLE_NAME
|| ' FETCH FIRST 5 ROWS ONLY)';
BEGIN
-- DBMS_OUTPUT.PUT_LINE(lv_query);
EXECUTE IMMEDIATE LV_QUERY
INTO LV_RESULT;
DBMS_OUTPUT.PUT_LINE(CHR(10));
DBMS_OUTPUT.PUT_LINE('TABLE NAME : ' || I.TABLE_NAME);
DBMS_OUTPUT.PUT_LINE('COLUMN NAMES : '
|| REPLACE(REPLACE(REPLACE(I.COLS, '*', ''), '||', ''), '''', '**'));
DBMS_OUTPUT.PUT_LINE(LV_RESULT);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('NO DATA IN TABLE : ' || I.TABLE_NAME);
END;
DBMS_OUTPUT.PUT_LINE(CHR(10));
DBMS_OUTPUT.PUT_LINE('---------------------------------------');
DBMS_OUTPUT.PUT_LINE('---------------------------------------');
END LOOP;
END;
Надеюсь, это то, что вы ищете.