PDA

Ver la Versión Completa : Problema con SUBSTRING


Gonbamon
13-12-2007, 16:29:26
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:


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:

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
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



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.