CSVを作成するためのSQLを生成するFunction

CREATE OR REPLACE FUNCTION MAKE_CSV_SQL
	(
		 p_table_name IN VARCHAR2
	)
RETURN VARCHAR2
IS
	CURSOR cur_columns(v_table_name VARCHAR2) IS
		SELECT
			*
		FROM
			user_tab_columns
		WHERE
			table_name = v_table_name
		ORDER BY
			column_id;
	v_sql_text	VARCHAR2(4000);
	first_flag	BOOLEAN:=TRUE;
BEGIN

	v_sql_text := 'SELECT ';
	FOR rec_columns IN cur_columns(UPPER(p_table_name)) LOOP
		IF first_flag THEN
			first_flag := FALSE;
		ELSE
			v_sql_text := v_sql_text || ' ||'',''|| ';
		END IF;

		v_sql_text := v_sql_text || ' ''"''|| ';

		CASE rec_columns.data_type
				WHEN 'DATE' THEN
					v_sql_text := v_sql_text || 'TO_CHAR(' || rec_columns.column_name || '''YYYY/MM/DD HH24:MI:SS'')';
				WHEN 'TIMESTAMP' THEN
					v_sql_text := v_sql_text || 'TO_CHAR(' || rec_columns.column_name || '''YYYY/MM/DD HH24:MI:SS.FF9'')';
				ELSE
					v_sql_text := v_sql_text || 'TO_CHAR(' || rec_columns.column_name || ')';
		END CASE;

		v_sql_text := v_sql_text || '||''"''';

	END LOOP;

	v_sql_text := RTRIM(v_sql_text,'aaa') || ' FROM ' || p_table_name;
	RETURN v_sql_text;
END;
/

テーブル名を入れればsqlが生成されます。

SELECT
	make_csv_sql(table_name)
FROM
	user_tables

こんな感じで自分が持ってるテーブルのCSVSQLを全部つくれたりします。