dump_oracle_table_for_pg: recognize CHAR columns
authorGalen Charlton <gmc@esilibrary.com>
Tue, 16 Apr 2013 20:40:03 +0000 (16:40 -0400)
committerGalen Charlton <gmc@esilibrary.com>
Tue, 16 Apr 2013 20:40:03 +0000 (16:40 -0400)
Also don't complain if integer columns don't specify
a scale.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>

dump_oracle_table_for_pg

index 93a2312..f8969e9 100755 (executable)
@@ -129,7 +129,7 @@ sub normalize_value_for_tsv {
 sub get_columns {
     my $table = shift;
     my $sth_cols = $dbh->prepare('
-        SELECT column_name, data_type, data_precision, data_scale, nullable 
+        SELECT column_name, data_type, data_precision, data_scale, data_length, nullable 
         FROM user_tab_columns WHERE table_name = ? ORDER BY column_id
     ');
     $sth_cols->execute($table);
@@ -147,11 +147,13 @@ sub get_pg_column_type {
     } elsif ($column_def->{DATA_TYPE} eq 'DATE') {
         $type = 'TIMESTAMP';
     } elsif ($column_def->{DATA_TYPE} eq 'NUMBER') {
-        if ($column_def->{DATA_SCALE} == 0) {
+        if (!defined($column_def->{DATA_SCALE}) || $column_def->{DATA_SCALE} == 0) {
             $type = 'INTEGER';
         } else {
             $type = "NUMERIC($column_def->{DATA_PRECISION},$column_def->{DATA_SCALE})";
         }
+    } elsif ($column_def->{DATA_TYPE} eq 'CHAR') {
+        $type = "CHAR($column_def->{DATA_LENGTH})";
     }
     if (defined $type) {
         $type .= " NOT NULL" if $column_def->{NULLABLE} eq 'N';