В некоторых случаях нам понадобился бы разделенный запятыми список всех столбцов таблицы в схеме.В таких случаях мы можем использовать эту универсальную функцию, которая выбирает список через запятую в виде строки.
CREATE OR REPLACE FUNCTION cols(
p_schema_name IN VARCHAR2,
p_table_name IN VARCHAR2)
RETURN VARCHAR2
IS
v_string VARCHAR2(4000);
BEGIN
SELECT LISTAGG(COLUMN_NAME , ',' ) WITHIN GROUP (
ORDER BY ROWNUM )
INTO v_string
FROM ALL_TAB_COLUMNS
WHERE OWNER = p_schema_name
AND table_name = p_table_name;
RETURN v_string;
END;
/
Итак, простой вызов функции из запроса дает строку со всеми столбцами.
select cols('HR','EMPLOYEES') FROM DUAL;
EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,JOB_ID,SALARY,COMMISSION_PCT,MANAGER_ID,DEPARTMENT_ID
Примечание: LISTAGG
завершится неудачей, еслиобщая длина всех столбцов превышает 4000
символов, что редко.В большинстве случаев это будет работать.