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