Italian community of Lazarus and Free Pascal

Altro => Pub => Topic aperto da: xinyiman - Dicembre 20, 2013, 02:33:40 pm

Titolo: Firebird store procedure
Inserito da: xinyiman - Dicembre 20, 2013, 02:33:40 pm
Ciao ragazzi, ho questa store procedure che mi da qualche grattacapo

Codice: [Seleziona]
ALTER PROCEDURE SP_NEW_FALLATO(
ARTICOLO    VARCHAR(50),
  QTA    FLOAT,
  QTAISINTEGER    INTEGER
)
RETURNS (
  RET    INTEGER,
  QTA_ARTICOLO    INTEGER,
  QTA_FLOAT_ARTICOLO FLOAT
)
AS
BEGIN
     ret=0;
     Qta_Articolo=0;
     QTA_FLOAT_ARTICOLO=0;

     --prima di fare qualcosa controllo che
     --la stessa quantità che voglio rendere
     --fallati sia disponibile
     if (QTAISINTEGER=0) then
        select QTA_PEZZI as Qta_Articolo
        from MAGAZZINO_FALLATI_LOCALE
        where Articolo=:ARTICOLO
        INTO :QTA_FLOAT_ARTICOLO;
     else
        select QTA_PESO as Qta_Articolo
        from MAGAZZINO_FALLATI_LOCALE
        where Articolo=:ARTICOLO
        INTO :QTA_FLOAT_ARTICOLO;

     if (QTA<=QTA_FLOAT_ARTICOLO) then
     begin
              --controllo se esiste già l'articolo nel database
              select Count(Articolo) as Qta_Articolo
              from MAGAZZINO_FALLATI_LOCALE
              where Articolo=:ARTICOLO
              INTO :Qta_Articolo;

              --se non esiste il dato nel database lo inserisco vuoto
              if ((Qta_Articolo is NULL)or(Qta_Articolo<=0)) then
              begin
                 insert into MAGAZZINO_FALLATI_LOCALE(Articolo,QTA_PEZZI_FALLATI,QTA_PESO_FALLATA)VALUES(:ARTICOLO, 0,0);
              end
              --ora in ogni caso vado ad aggiornare il dato perchè tanto esiste il record
              if (QTAISINTEGER=0) then
              begin
                 update MAGAZZINO_FALLATI_LOCALE SET QTA_PEZZI_FALLATI=QTA_PEZZI_FALLATI+CAST(:QTA as integer) WHERE Articolo=:Articolo;
              end
              else
              begin
                  update MAGAZZINO_FALLATI_LOCALE SET QTA_PESO_FALLATA=QTA_PESO_FALLATA+:QTA WHERE Articolo=:Articolo;
              end
              --ora elimino la stessa quantità dal magazino locale

     end
     else
     begin
         ret=1;
     end
END;

Qualcuno capisce perchè mi da il seguente errore:
: PrepareStatement :
 -Dynamic SQL Error
 -SQL error code = -104
 -Token unknown - line 1, column 1
 -END
END;


Il problema dovrebbe essere legato al begin...end dei vari if nella SP.

Grazie mille
Titolo: Re:Firebird store procedure
Inserito da: Stilgar - Dicembre 20, 2013, 06:03:57 pm
che "set term" usi?
Titolo: Re:Firebird store procedure
Inserito da: xinyiman - Dicembre 20, 2013, 07:22:55 pm
come faccio a capirlo?

sono poco avvezzo alle store procedure, ma ora mi servono
Titolo: Re:Firebird store procedure
Inserito da: Stilgar - Dicembre 21, 2013, 09:51:05 am
 Facciamo così. Set term !! ; all'inizio. End!! All'ultima riga. In questo modo configuri il subengine delle stored procedure ;-)
Titolo: Re:Firebird store procedure
Inserito da: xinyiman - Dicembre 24, 2013, 03:32:01 pm
sembrerebbe funzionare  :)
Grazie