[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