Vous ne pouvez pas ajouter directement des expressions dynamiques en tant qu'entrée au tableau croisé dynamique, vous pouvez essayer quelque chose comme ceci où nous récupérons toutes les colonnes de la table dans une variable via un bloc PL/SQL, puis la transmettons d'une manière à l'attendu par l'Oracle Fonctionnalité de tableau croisé dynamique.
SET serveroutput ON;
DECLARE
sqlquery VARCHAR(32767);
cols VARCHAR2(32767);
BEGIN
SELECT listagg('''' || column_name || '''', ',') within
GROUP(
ORDER BY column_name)
INTO cols
FROM
(SELECT DISTINCT column_name
FROM all_tab_columns
WHERE TABLE_NAME = 'TABLE_NAME')
;
sqlquery := '
SELECT * FROM
(
SELECT table_name, column_name
FROM ALL_TAB_COLUMNS
WHERE
table_name = ''TABLE_NAME''
)
PIVOT
(
MIN(column_name)
FOR column_name IN (
''||cols||''
)
)
ORDER BY table_name';
DBMS_OUTPUT.PUT_LINE(sqlquery);
EXECUTE IMMEDIATE sqlquery;
END;
/