Ir al contenido


Foto

Error al definir SP en IB Expert


  • Por favor identifícate para responder
6 respuestas en este tema

#1 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 07 mayo 2012 - 03:05

Hola Gente, estoy definiendo un SP en Ib expert, y me da error

CREATE OR ALTER PROCEDURE COMPRASC1 (
    f1 date,
    f2 date,
    prov integer)
as
declare variable saldo float;
begin
SELECT CASE idcomprobante
WHEN 1 THEN 'FC'
WHEN 2 THEN 'ND'
WHEN 3 THEN 'NC'
WHEN 4 THEN 'DI'
WHEN 5 THEN 'NI'
WHEN 6 THEN 'OP'
END AS tipo,
CASE idcomprobante
WHEN 3 THEN IMPORTEPESOS*-1
WHEN 5 THEN IMPORTEPESOS*-1
else IMPORTEPESOS
End ,
CASE idcomprobante
WHEN 3 THEN IMPORTEDOLARES*-1
WHEN 5 THEN IMPORTEDOLARES*-1
else  IMPORTEDOLARES
End,(SELECT MIN(FECHA) FROM COMPRASDETALLEMOV WHERE ID=CD.ID),
IMPORTEPESOS - (SELECT SUM(MONTOORDEN)  FROM COMPRASDETALLEMOV WHERE ID=CD.ID AND NROORDEN <> 0),
IMPORTEDOLARES - (SELECT SUM(MONTOORDENDOLARES)  FROM COMPRASDETALLEMOV WHERE ID=CD.ID AND NROORDEN <> 0),
CD.LETRA || ' - ' || Lpad(CD.PDV,4,0) || ' - ' || Lpad(CD.NRO,8,0),CD.FECHA
FROM COMPRASDETALLE CD JOIN COMPRASDELPROVEEDOR CP ON CD.ID = CP.IDCOMPRA WHERE IDPROVEEDOR = :prov order by CD.fecha ASC
end


Este error:



delphi
  1. Invalid token.
  2. Dynamic SQL Error.
  3. SQL error code = -104.
  4. Token unknown - line 30, column 1.
  5. end.



no me doy cuenta que falta para cerrarlo  :)



gracias!  (y)


  • 0

#2 Wilson

Wilson

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.137 mensajes

Escrito 07 mayo 2012 - 06:29


no me doy cuenta que falta para cerrarlo  :)

Prueba con un punto y coma después  de ASC en la línea 29.

Saludos
  • 0

#3 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 08 mayo 2012 - 06:52



no me doy cuenta que falta para cerrarlo  :)

Prueba con un punto y coma después  de ASC en la línea 29.

Saludos


gracias ya había probado con eso pero no es el error. Voy a revisar la estructura....
  • 0

#4 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 mensajes
  • LocationOaxaca, México

Escrito 08 mayo 2012 - 07:46

Creo para este caso tendrías que usar el FOR SELECT dado que creo, calculas todos tus datos para posteriormente continuar si no pues como para qué el query?, de lo contrario marca ese error.


FOR SELECT
  FECHA, CONCEPTO, ENTRADA, SALIDA
FROM
  MOVIMIENTOS_CUENTA
WHERE
  FECHA > :DESDE
INTO
  :FECHA, :CONCEPTO, :ENTRADA, :SALIDA
DO BEGIN
  SALDO = SALDO + ENTRADA - SALIDA;
  SUSPEND;
END


Info: http://www.firebirds...-forselect.html

Saludos



  • 0

#5 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 08 mayo 2012 - 08:16

Buenas,

Cualquier sentencia SQL de selección que se lance en un SP tiene que devolver los campos de la select en variable. Si además quieres devolver esos resultados necesitas que esas variables sean parámetros de salida y tienes que acompañarlo de un suspend.

La estructura que te muestra fredycc es un claro ejemplo de cómo se haría.

No obstante, para una "sencilla" sentencia SQL de selección.... ¿crees que vale la pena hacer un SP?

Nos leemos

  • 0

#6 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 08 mayo 2012 - 10:26

Buenas,

Cualquier sentencia SQL de selección que se lance en un SP tiene que devolver los campos de la select en variable. Si además quieres devolver esos resultados necesitas que esas variables sean parámetros de salida y tienes que acompañarlo de un suspend.

La estructura que te muestra fredycc es un claro ejemplo de cómo se haría.

No obstante, para una "sencilla" sentencia SQL de selección.... ¿crees que vale la pena hacer un SP?

Nos leemos


Claro, arranque al revés.
Voy a tomar ese ejemplo a ver, si nos encontramos con lo que necesito.

Comento luego...  ^o|


  • 0

#7 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 08 mayo 2012 - 01:28

Solucionado, respetando esta estructura:

create procedure shownums
  returns (aa int, bb int, sm int, df int)
as
begin
  for select distinct a, b from numbers order by a, b
    into :aa, :bb
  do
  begin
    sm = aa + bb;
    df = aa - bb;
    suspend;
  end
end

  • 0




IP.Board spam blocked by CleanTalk.