Tal vez esto no tiene que ver totalmente con el lenguaje Perl, pero yo creo que sí; este problema solo lo tengo en Perl, jeje.
Bueno, les explico, tengo un programa en Perl que carga un archivo plano en una tabla que se podría calificar como de "paso" y una vez cargada dicha tabla se realiza un "insert into" en otra tabla.
El problema es que me está marcando un error de número inválido, pero todos los datos que quiero pasar son numéricos.
Aquí les pongo el código que utilizo:
Using perl Syntax Highlighting
#! /usr/local/bin/perl
use warnings;
use strict;
use DBI;
##hace la carga de datos en la tabla de paso, esto lo hace sin problemas
system("sqlldr usuario/pass\@BD CONTROL=archivo_control.ctl LOG=log.log direct=true");
##hace la carga desde la tabla de paso a la tabla permanente.
##aqui es donde esta el problema
my $QUERY = "insert into tabla_productiva \n".
"(campo_varchar,campo_number) \n".
"select \n".
" campo_varchar,to_number(campo_number) \n".
"from tabla_de_paso";
my $dbh = DBI->connect("dbi:Oracle:BD", "user", "pass", {AutoCommit => 1 });
my $statement= $QUERY;
my $sth = $dbh->prepare($statement) or die("Couldn't prepare statement: " . $dbh->errstr);
my $rv = $sth->execute or die("Couldn't execute statement: " . $sth->errstr);
$sth->finish;
$dbh->disconnect;
use warnings;
use strict;
use DBI;
##hace la carga de datos en la tabla de paso, esto lo hace sin problemas
system("sqlldr usuario/pass\@BD CONTROL=archivo_control.ctl LOG=log.log direct=true");
##hace la carga desde la tabla de paso a la tabla permanente.
##aqui es donde esta el problema
my $QUERY = "insert into tabla_productiva \n".
"(campo_varchar,campo_number) \n".
"select \n".
" campo_varchar,to_number(campo_number) \n".
"from tabla_de_paso";
my $dbh = DBI->connect("dbi:Oracle:BD", "user", "pass", {AutoCommit => 1 });
my $statement= $QUERY;
my $sth = $dbh->prepare($statement) or die("Couldn't prepare statement: " . $dbh->errstr);
my $rv = $sth->execute or die("Couldn't execute statement: " . $sth->errstr);
$sth->finish;
$dbh->disconnect;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
y me manda la siguiente salida:
- Código: Seleccionar todo
SQL*Loader: Release 10.2.0.4.0 - Production on Mar May 12 17:57:14 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.
Load completed - logical record count 7.
DBD::Oracle::st execute failed: ORA-01722: invalid number (DBD ERROR: error possibly near <*> indicator at char 185 in 'insert into tabla_productiva
(campo_varchar,campo_number)
select
campo_varchar,<*>to_number(campo_number)
from tabla_de_paso') [for Statement "insert into tabla_productiva
(campo_varchar,campo_number)
select
campo_varchar,to_number(campo_number)
from tabla_de_paso"] at carga_datos.pl line 143.
Cabe mencionar que si ejecuto ese mismo query directo en mi base de datos no me manda error alguno y también si lo ejecuto con un programa en Java me lo realiza sin problemas.
Espero haberme explicado bien, y sobretodo que alguien me pueda ayudar.
Gracias y saludos.