Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problema con SUBSTRING (https://www.clubdelphi.com/foros/showthread.php?t=51371)

Gonbamon 13-12-2007 16:29:26

Problema con SUBSTRING
 
Hola.
Soy nuevo en el foro y después de revisar los hilos no he encontrado solución a mi problema:

Uso Firebird 2.0 con SQL Manager 2005 (IBManager).
Tengo un problema con la función SUBSTRING, si la uso en una SELECT normal:

Código SQL [-]
 
SELECT
HHDOCUMENT.HDCDATEEND,
SUBSTRING(HHDOCUMENT.HDCDATEEND FROM 1 FOR 4)
FROM
HHDOCUMENT

el resultado es correcto. Sin embargo, en cuento intento usar SUBSTRING en una select dentro de un procedimiento almacenado:
Código SQL [-]
  
CREATE PROCEDURE FINANCES(
  CMYCODE_IN VARCHAR(20) CHARACTER SET NONE)
RETURNS(
  HDCDATEEND VARCHAR(20) CHARACTER SET NONE,
  HDCDATEEND2 VARCHAR(20) CHARACTER SET NONE)
AS
BEGIN
        FOR
           SELECT
                 HHDOCUMENT.HDCDATEEND,
                 SUBSTRING(HHDOCUMENT.HDCDATEEND FROM 1 FOR 4)
           FROM
                 HHDOCUMENT
           WHERE
                 HHDOCUMENT.CMYCODE = :CMYCODE_IN
           
            INTO :
                 HDCDATEEND,
                 HDCDATEEND2
        DO
        SUSPEND;
        
END

Me da error de sintaxis:

Precompiler Error: Syntax error - FROM.


¿Cúal es el problema?

Gracias de antemano.

Saludos.

jhonny 13-12-2007 17:24:36

No encuentro ninguna complicación, acabo de copiar tu codigo y sin cambiar la "estructura" del mismo (Solo los nombres de las tablas y campos) he obtenido un resultado satisfactorio, la diferencia es que estoy usando FireBird 2.1, ¿Te sucede lo mismo si te actualizas a FireBird 2.0.3?, aunque sinceramente en FireBird 1.5 funcionan bien este tipo de cosas.

Gonbamon 17-12-2007 13:44:12

Cita:

Empezado por jhonny (Mensaje 252415)
No encuentro ninguna complicación, acabo de copiar tu codigo y sin cambiar la "estructura" del mismo (Solo los nombres de las tablas y campos) he obtenido un resultado satisfactorio, la diferencia es que estoy usando FireBird 2.1, ¿Te sucede lo mismo si te actualizas a FireBird 2.0.3?, aunque sinceramente en FireBird 1.5 funcionan bien este tipo de cosas.


Gracias por contestar.
¿Qué editor sql usas?
He descubierto que el problema me lo esta dando el IBManager 2005, cuando creo el proc mediante la consola (isql) no me da problemas. Incluso uno vez creado el proc con SUBSTRING lo ejecuto a través del IBManager y 0 problemas, eso sí, si intento editarlo ya me devuelve el mencionado error.
Transcribo el error devuelto por el IBManager mediante msgbox:

"There is an error in input of field 'Procedure body'."


Saludos.

Tal 17-12-2007 14:54:53

Buenas.
Yo uso el IBExpert que es "gratuito" pero yo ya lo estoy pagando.
Yo lo que veo raro es que los Into :... solo hay una variable con : la otra no tiene dos puntos y eso a mi me suele dar error

Código SQL [-]
  
CREATE PROCEDURE FINANCES(
  CMYCODE_IN VARCHAR(20) CHARACTER SET NONE)
RETURNS(
  HDCDATEEND VARCHAR(20) CHARACTER SET NONE,
  HDCDATEEND2 VARCHAR(20) CHARACTER SET NONE)
AS
BEGIN
        FOR
           SELECT
                 HHDOCUMENT.HDCDATEEND,
                 SUBSTRING(HHDOCUMENT.HDCDATEEND FROM 1 FOR 4)
           FROM
                 HHDOCUMENT
           WHERE
                 HHDOCUMENT.CMYCODE = :CMYCODE_IN
           
            
           --tu codigo              
           --INTO :HDCDATEEND,
           --      HDCDATEEND2
           --como lo pondría yo
           INTO :HDCDATEEND,
                :HDCDATEEND2


        DO
        SUSPEND;
        
END

Mira a ver si es por eso.

Un saludo, espero haberte ayudado.

jhonny 17-12-2007 15:15:14

Yo tambien utilizo el IBExpert, pero aunque te mencione que no tuve problema con el Script y te funciona con el isql, deberias tener en cuenta la recomendación de Tal ya que es muy acertada su observación :).

Gonbamon 17-12-2007 18:50:48

Con el IBExpert se acabaron mis problemas. Lo de los dos puntos creo que es indiferente, me funciona de ambas maneras.

Muchas gracias.

Saludos.


La franja horaria es GMT +2. Ahora son las 19:27:23.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi