• Publicidad

conversion error from string en Firebird

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

conversion error from string en Firebird

Notapor sarriaga » 2014-02-20 17:52 @786

Hola, ¿qué tal?

Estoy realizando algunas consultas SQL con un script hecho en Perl. Verán: obtengo unos registros los cuales requiero insertar en una tabla en Firebird, solo que al ejecutar el Procedure para el INSERT me marca este error:

conversion error from string "20140220161918" at copyEtiq.pl

por lo que llegué a la conclusión de que este formato no es legible para Firebird, es decir no puede insertar las fechas de esta manera.

¿De que forma puedo convertir estas fechas a formatos permitidos por Firebird? Tomando en cuenta que el campo de la tabla destinado en Firebird es de tipo TIMESTAMP.

Espero que puedan apoyarme ya que no he encontrado mucha información respecto a este punto.
Saludos
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Publicidad

Re: conversion error from string en Firebird

Notapor explorer » 2014-02-20 19:07 @838

El formato de las fechas que admite Firebird lo tienes en la propia página de Firebird: Firebird Date Literals.

Viendo tu cadena, me parece que no concuerda con ninguna de las mostradas.
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: conversion error from string en Firebird

Notapor sarriaga » 2014-02-21 08:48 @408

Exactamente, por lo que tendría convertir este formato que tengo (YYMMDDHHMMSS) a un formato legible por Firebird. ¿Existe alguna condición o método en Perl para hacer esto? ¿O tendría que ir convirtiendo con expresiones regulares?
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: conversion error from string en Firebird

Notapor explorer » 2014-02-21 11:37 @526

Yo creo que solo una expresión regular, sacas toda la información, y luego la recompones con las dobles comillas, poniendo los delimitadores que Firebird exige. Lo que debes elegir es cuál de todos esos formatos que te pone el manual debes escoger.
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: conversion error from string en Firebird

Notapor sarriaga » 2014-02-26 16:25 @725

muchas gracias, quedó perfecto con la expresión regular.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $timestamp = &s_get_now();
  2. $timestamp =~ s/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/$2-$3-$1 $4:$5:$6/;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: conversion error from string en Firebird

Notapor sarriaga » 2014-02-27 10:45 @490

Ahora tengo un problema al hacer la consulta, ya que tengo las fechas convertidas quiero realizar la consulta a la tabla de Firebird, si hago la consulta con la fecha $init funciona aunque no me permite imprimir la información en la tabla, y si realizo la consulta con $init y $end (timestamp) no realiza la consulta. ¿Esto por qué sucede? ¿De qué manera puedo resolverlo?

Consulta con $init:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $tabla;
  2. my $init ='20110714063000';
  3. $init =~ s/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/$2-$3-$1 $4:$5:$6/;
  4. my $consulta = $db_fbd->selectall_arrayref("SELECT CAMPO1, CAMPO2 FROM MI_TABLA WHERE FECHA_Y_HORA >= '$init' AND SCRIPT NOT LIKE '%libro%' ORDER BY FECHA_Y_HORA DESC;");
  5. #*/La consulta se realiza correctamente; procede a crear la tabla para visualización./*
  6.  
  7. foreach(@$consulta){
  8.   push(@$tabla, $_);
  9. }
  10. foreach(@$tabla){
  11.   $_ = $cgi->td($_);
  12. }
  13.  
  14. print $cgi->table({-border=>1, -cellpadding=>2, -cellspacing=>0}, $cgi->Tr({-align=>'left'},$tabla)) if defined $tabla && @$tabla;
  15.  
  16. #*/Aunque la consulta se realizó no se visualiza la tabla con los datos obtenidos
  17.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



Consulta con $init y $end (timestamp):
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $end = &s_get_now(); #timestamp
  2. $end =~ s/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})$/$2-$3-$1 $4:$5:$6/;
  3.  
  4. my $consulta = $db_fbd->selectall_arrayref("SELECT CAMPO1, CAMPO2 FROM MI_TABLA WHERE FECHA_Y_HORA >= '$init' AND FECHA_Y_HORA < '$end' AND SCRIPT NOT LIKE '%libro%' ORDER BY FECHA_Y_HORA DESC;");
  5.  
  6. #*/La consulta NO se realiza correctamente; por lo que no puede crear la tabla para #visualización./*
  7.  
  8. foreach(@$consulta){
  9.   push(@$tabla, $_);
  10. }
  11. foreach(@$tabla){
  12.   $_ = $cgi->td($_);
  13. }
  14.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La consulta quedaría de la siguiente manera ya con el formato correcto, tomando en cuenta que esta consulta con esta estructura la realizo directamente en FlameRobin y funciona perfectamente.
Sintáxis: [ Descargar ] [ Ocultar ]
Using sql Syntax Highlighting
  1. SELECT CAMPO1, CAMPO2 FROM MI_TABLA WHERE FECHA_Y_HORA >= '07-14-2011 06:30:00' AND FECHA_Y_HORA >= '07-16-2011 06:30:00' AND SCRIPT NOT LIKE '%libro%' ORDER BY FECHA_Y_HORA DESC;
  2.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Espero puedan ayudarme a saber por qué esto no funciona.
Saludos
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: conversion error from string en Firebird

Notapor sarriaga » 2014-02-27 15:44 @697

El problema de esta consulta es que el campo2 es de tipo Blob por lo tanto no me muestra nada. ¿¿Cómo se extraen este tipo de campos??
sarriaga
Perlero nuevo
Perlero nuevo
 
Mensajes: 69
Registrado: 2013-10-21 08:42 @404

Re: conversion error from string en Firebird

Notapor explorer » 2014-02-28 08:27 @394

Para recuperar un BLOB no hay que hacer nada especial. Según el manual del DBI, el campo se recupera en una variable escalar, como otra cualquiera.

En el manual de DBD::Firebird, en la sección de errores y limitaciones, comentan que hay un límite fijo de 1 MB en el tamaño de los BLOB que puede manejar.

Aquí tienes un ejemplo de escritura y recuperación de campos BLOB.
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 Básico

¿Quién está conectado?

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