diff --git a/R/Table.R b/R/Table.R index 0093ef80..a2681c98 100644 --- a/R/Table.R +++ b/R/Table.R @@ -70,7 +70,7 @@ odbc_write_table <- fieldDetails <- tryCatch({ details <- odbcConnectionColumns(conn, name) details$param_index <- match(details$name, names(values)) - details[!is.na(details$param_index), ] + details[!is.na(details$param_index) & !is.na(details$data_type), ] }, error = function(e) { return(NULL) }) @@ -79,7 +79,8 @@ odbc_write_table <- name <- dbQuoteIdentifier(conn, name) fields <- dbQuoteIdentifier(conn, names(values)) - params <- rep("?", length(fields)) + nparam <- length(fields) + params <- rep("?", nparam) sql <- paste0( "INSERT INTO ", name, " (", paste0(fields, collapse = ", "), ")\n", @@ -87,7 +88,7 @@ odbc_write_table <- ) rs <- OdbcResult(conn, sql) - if (!is.null(fieldDetails) && nrow(fieldDetails)) { + if (!is.null(fieldDetails) && nrow(fieldDetails) == nparam) { result_describe_parameters(rs@ptr, fieldDetails) } diff --git a/R/db.R b/R/db.R index 22df8294..db06eff9 100644 --- a/R/db.R +++ b/R/db.R @@ -61,7 +61,8 @@ setMethod( owner AS \"schema_name\", null AS \"catalog_name\", null AS \"data_type\", - decode(data_type,'CHAR',char_length,'NCHAR',char_length, 'VARCHAR2',char_length,'NVARCHAR2',char_length, 'RAW',data_length, 'ROWID', data_length, 'UNDEFINED', 0, data_precision) AS \"column_size\", decode(data_type, 'DATE',16,'FLOAT',8,'BINARY_FLOAT',4,'BINARY_DOUBLE',8,'LONG RAW',2147483647,'LONG',2147483647,'CLOB',2147483647,'NCLOB',2147483647,'BLOB',2147483647,'BFILE',2147483647,'CHAR',data_length,'NCHAR',data_length,'VARCHAR2',data_length,'NVARCHAR2',data_length,'NUMBER',NVL(data_precision+2,40),data_length) AS \"buffer_length\", + decode(data_type,'CHAR',char_length,'NCHAR',char_length, 'VARCHAR2',char_length,'NVARCHAR2',char_length, 'RAW',data_length, 'ROWID', data_length, 'UNDEFINED', 0, data_precision) AS \"column_size\", + decode(data_type, 'DATE',16,'FLOAT',8,'BINARY_FLOAT',4,'BINARY_DOUBLE',8,'LONG RAW',2147483647,'LONG',2147483647,'CLOB',2147483647,'NCLOB',2147483647,'BLOB',2147483647,'BFILE',2147483647,'CHAR',data_length,'NCHAR',data_length,'VARCHAR2',data_length,'NVARCHAR2',data_length,'NUMBER',NVL(data_precision+2,40),data_length) AS \"buffer_length\", data_scale AS \"decimal_digits\", null AS \"numeric_precision_radix\", null AS \"remarks\",