[firebase-br] Problemas com SP

André Fontes Moinho mario.alex em ibest.com.br
Ter Jan 18 10:54:31 -03 2005


Bom Pessoal, Estou com um problema na SP abaixo, acusa um erro no primeiro 
select, não sei mais o que fazer.
Se alguém tiver algum tutorial de como usar SPs no Firebird também ajudaria.

----------------------------------------------------------
drop procedure sp_validar;
commit;

COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

/* Stored procedures */

CREATE PROCEDURE "SP_VALIDAR"
(
  "OPCAO" CHAR(1),
  "DADO" VARCHAR(50)
)
RETURNS
(
  "RET" INTEGER
)
AS
BEGIN EXIT; END ^

SET TERM ; ^
SET AUTODDL ON;
COMMIT WORK;

COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;

ALTER PROCEDURE SP_VALIDAR (OPCAO CHAR(1),DADO VARCHAR(50))
RETURNS (RET INTEGER)
AS
 declare variable LEITORA varchar(8);
 declare variable CARTAO varchar(40);
 declare variable ADMINISTRA char(1);
 declare variable CARAC varchar(1);
 declare variable CONTADOR integer;
 declare variable QTD_LEITORA integer;
 declare variable QTD_CARTAO integer;
 declare variable TAMANHO integer;
BEGIN
  CONTADOR = 11;
  LEITORA = SUBSTR(DADO,1,9);
  CARTAO = '';
  TAMANHO = (STRLEN(DADO)-10);
  while(CONTADOR < TAMANHO) do
  begin
    CARAC = SUBSTR(DADO,CONTADOR,CONTADOR);
    if (CARAC<>'') then
    begin
      if (CARAC<>'#') then
        CARTAO = CARTAO + CARAC;
      end
    end
  end;

 select count(CMP_LEITORA) FROM tb_leitora WHERE CMP_LEITORA=:LEITORA into 
:QTD_LEITORA;
 select count(CMP_CARTAO) FROM tb_cartao WHERE cmp_cartao=CARTAO into 
:QTD_CARTAO;
 select CMP_ADMIN FROM tb_leitora WHERE CMP_LEITORA=:LEITORA into 
:ADMINISTRA;

  if QTD_LEITORA = 0 then /* Se leitora nao existe retorna 1*/
  begin
    RET=1
  end
  else
  begin
    if QTD_CARTAO = 0 then /* Se Cartao Não existe Retorna 2 */
    begin
      RET = 2
    end
    else
    begin
      if ADMINISTRA='1' then    /* Se Leitora for Administrativa*/
      begin
        if OPCAO=2 then    /* Se Deseja Cadastrar o Cartao*/
        begin
          insert into tab_cartao(CMP_CARTAO,CMP_NOME) values (CARTAO, 'SEM 
NOME'); /* CAdastra o cartao */
          RET=3;
        end
        else
          RET=4;
      end
      else
      begin
        insert into tab_transacao(CMP_CARTAO,CMP_LEITORA) values (CARTAO, 
LEITORA); /* Registra o Ponto */
        RET=0;
      end;
    end;
  end;
  suspend;
END^


SET TERM ; ^
SET AUTODDL ON;
COMMIT WORK; 







Mais detalhes sobre a lista de discussão lista