I've tried using Csv.writeResultSet to export parts of an Oracle database 
to I can later use it with CSVREAD. I encountered two issues:

1. Oracle formats Timestamp columns like this on getString: 
"2009-6-30.16.17. 21. 996802000"
2. Oracle formats Date columns like this on getString: "2008-12-31 
00:00:00.0"

These formats will not work when selecting into H2 columns with the same 
types. The timestamp is totally messed up and the Date contains a time.

It could be argued that this is a problem with the Oracle driver. However, 
ResultSet.getString doesn't specify anything about the format of the 
string. I got the following patch of org.h2.tools.Csv#writeResultSet to 
work:

            while (rs.next()) {
                for (int i = 0; i < columnCount; i++) {
                    if (meta.getColumnType(i+1) == Types.TIMESTAMP && 
rs.getTimestamp(i+1)!=null) {
                        // Workaround of timestamp format bug in Oracle 
driver
                        row[i] = rs.getTimestamp(i+1).toString();
                    } else if (meta.getColumnType(i+1) == Types.DATE && 
rs.getTimestamp(i+1)!=null) {
                        // Workaround of date == datetime bug in Oracle 
driver
                        row[i] = rs.getDate(i+1).toString();
                    } else {
                        row[i] = rs.getString(i+1);
                    }
                }
                writeRow(row);
                rows++;
            }

It's not pretty, but if you want to use Csv.write to export from Oracle, it 
seems to be the only possibility...


~Johannes

-- 
You received this message because you are subscribed to the Google Groups "H2 
Database" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/h2-database/-/suXkzU5hNLwJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/h2-database?hl=en.

Reply via email to