• Publicidad

Error en execute()

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Error en execute()

Notapor dolisguilarte » 2012-03-19 10:58 @498

Hola a todos buenos dias,
Les escribo ya que tengo un problema haciendo un execute() no se porque el codigo no funciona bien, en el segundo select y el script esta bloqueando la base de datos exactamente en la instruccion : $sth_select->execute()|| $self->error;
esta corresponde al segundo select :( ($sql_select_01)


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $sql_select = 'SELECT * FROM  BSC  WHERE (id_nivel = ?) '; #**BUSCAR REGISTROS BSC RELACIONADOS AL NIVEL*****
  2. $sth = $self->{dbh}->prepare($sql_select) || $self->error;
  3. $sth->execute($nivel_origen) || $self->error;
  4. #********** RECORREMOS  REGISTROS DE BSC******
  5. while (@array_bsc = $sth->fetchrow_array){
  6.     $id_bsc=$array_bsc[0];  #*********Este es el id_bsc a duplicar******
  7.         #****************DUPLICAR EL BSC********
  8.         $sql_insert = 'insert into bsc (id_nivel, desc_bsc, orden, bsc_vigencia, id) SELECT ?, desc_bsc, orden, bsc_vigencia, id FROM  BSC WHERE id_bsc = ?
  9.                         SELECT  @@identity';
  10.         my $sth_bsc = $self->{dbh}->prepare($sql_insert) || $self->error;
  11.         $sth_bsc->execute($identity,$id_bsc) || $self->error; # Los parametros van Primero el Nuevo ID Nivel y segundo el ID_BSC ACTUAL
  12.        
  13.  
  14.     #**************BUSCARMOS EL ULTIMO ID GENERADO PARA GUARDAR EN VARIABLE
  15.         my $sql_select_01='SELECT TOP 1 id_bsc FROM  BSC ORDER BY id_bsc DESC';
  16.         $sth_select = $self->{dbh}->prepare($sql_select_01) || $self->error;
  17.         $sth_select->execute()|| $self->error;
  18.         #@fields = $sql_select_01->fetchrow_array;
  19.    # $new_id_bsc = $fields[0]; #****ESTE ES EL NUEVO ID_BSC GENERADO********
  20.    
  21.    
  22.    
  23. }#***********FIN DEL WHILE BSC
  24.  
  25.  
  26.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
dolisguilarte
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2012-03-07 16:33 @731

Publicidad

Re: Error en execute()

Notapor explorer » 2012-03-19 11:14 @510

No sé si 'SELECT TOP 1 id_bsc FROM BSC ORDER BY id_bsc DESC' está bien escrito.

¿A qué motor de base de datos estás consultando?

En MySQL, dice que no entiende lo del 'TOP'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Error en execute()

Notapor dolisguilarte » 2012-03-19 12:00 @541

Sí, está bien. Anexo pantalla con el SQL directo. Es SQL Server 2000.

Es bien extraño, porque en esa línea justo da el error :(
Adjuntos
sql.jpg
sql.jpg (37.53 KiB) Visto 1274 veces
dolisguilarte
Perlero nuevo
Perlero nuevo
 
Mensajes: 21
Registrado: 2012-03-07 16:33 @731

Re: Error en execute()

Notapor explorer » 2012-03-19 12:15 @552

Tampoco sabemos qué es lo que hace $self->error().

Como no es frecuente que prepare() falle, sospecho que el problema puede estar ahí.

Sospecho que debe ser un método definido por ti, donde sacas el error producido en pantalla o STDERR, y terminas con un mensaje de error.

Digo terminar, porque escribes líneas como esta:

$sth = $self->{dbh}->prepare($sql_select) || $self->error;

que quiere decir:

«$sth debe tomar el valor resultado de la llamada a prepare() o el valor del resultado de la llamada a error()».

Así que error() debería terminar el programa, porque si no lo hace y regresa a donde fue llamado, $sth tendrá un valor (el que devuelva error()), y con él intentará hacer el execute(). Si ese valor no es un controlador de sentencias como los que devuelve prepare(), se producirá un error más grave.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados