procedure não retorna resultado apos if
tenho essa procedure
CREATE PROCEDURE VALIDA_USUARIO (
PAR_NOME_USUARIO VARCHAR(10),
PAR_SENHA_USUARIO VARCHAR(10))
RETURNS (
R_CODIGO INTEGER,
R_NOME VARCHAR(10),
R_SENHA VARCHAR(10),
R_ATIVO VARCHAR(1),
R_DATA_EXP DATE,
R_VALIDO VARCHAR(1))
AS
begin
FOR SELECT USUARIOS.codigo,
usuarios.nome,
usuarios.senha,
USUARIOS.ativo,
USUARIOS.data_expiracao
FROM usuarios
WHERE USUARIOS.NOME = :par_nome_usuario AND USUARIOS.senha = :par_senha_usuario
INTO :R_CODIGO,
:R_NOME,
:R_SENHA,
:R_ATIVO,
:R_DATA_EXP
DO
suspend;
BEGIN
IF (:R_NOME is null) then
BEGIN
EXCEPTION USUARIO_SENHA_INVALIDO;
END
ELSE
BEGIN
IF (:R_ATIVO <> ´S´) THEN
BEGIN
EXCEPTION USUARIO_DESATIVADO;
END
ELSE
BEGIN
IF (:R_DATA_EXP is null) then
begin
r_valido = ´S´;
end
else
begin
if (:R_DATA_EXP < CURRENT_TIMESTAMP) then
BEGIN
EXCEPTION usuario_expirado;
END
else
begin
r_valido = ´S´;
end
end
END
END
END
end
todos os if onde uso o EXCEPTION retorna a EXCEPTION mas onde tem r_valido = ´S´ não é incluido o resultado ficando o campo como null
o que pode estar a contecendo???
Valeu
Uilian Gurjon
CREATE PROCEDURE VALIDA_USUARIO (
PAR_NOME_USUARIO VARCHAR(10),
PAR_SENHA_USUARIO VARCHAR(10))
RETURNS (
R_CODIGO INTEGER,
R_NOME VARCHAR(10),
R_SENHA VARCHAR(10),
R_ATIVO VARCHAR(1),
R_DATA_EXP DATE,
R_VALIDO VARCHAR(1))
AS
begin
FOR SELECT USUARIOS.codigo,
usuarios.nome,
usuarios.senha,
USUARIOS.ativo,
USUARIOS.data_expiracao
FROM usuarios
WHERE USUARIOS.NOME = :par_nome_usuario AND USUARIOS.senha = :par_senha_usuario
INTO :R_CODIGO,
:R_NOME,
:R_SENHA,
:R_ATIVO,
:R_DATA_EXP
DO
suspend;
BEGIN
IF (:R_NOME is null) then
BEGIN
EXCEPTION USUARIO_SENHA_INVALIDO;
END
ELSE
BEGIN
IF (:R_ATIVO <> ´S´) THEN
BEGIN
EXCEPTION USUARIO_DESATIVADO;
END
ELSE
BEGIN
IF (:R_DATA_EXP is null) then
begin
r_valido = ´S´;
end
else
begin
if (:R_DATA_EXP < CURRENT_TIMESTAMP) then
BEGIN
EXCEPTION usuario_expirado;
END
else
begin
r_valido = ´S´;
end
end
END
END
END
end
todos os if onde uso o EXCEPTION retorna a EXCEPTION mas onde tem r_valido = ´S´ não é incluido o resultado ficando o campo como null
o que pode estar a contecendo???
Valeu
Uilian Gurjon
Uiliangurjon
Curtidas 0
Respostas
Kotho
05/04/2005
O problema é que o suspend está antes da atribuição... tente colocar o suspend logo abaixo da atribuição, e todo o bloco de BEGIN mais externo depois do DO.
GOSTEI 0
Uiliangurjon
05/04/2005
tentei colocar o suspend em outras linha para testar mas o
IF (:R_NOME is null) then
BEGIN
EXCEPTION USUARIO_SENHA_INVALIDO;
END
não retorna a exception
todos os outros retornam
IF (:R_NOME is null) then
BEGIN
EXCEPTION USUARIO_SENHA_INVALIDO;
END
não retorna a exception
todos os outros retornam
GOSTEI 0
Kotho
05/04/2005
se eu não me engano, você deve ter um único suspend para cada linha do FOR...SELECT...DO.
Olhando melhor sua procedure, acho melhor colocar o Suspend antes do último END
Olhando melhor sua procedure, acho melhor colocar o Suspend antes do último END
GOSTEI 0
Uiliangurjon
05/04/2005
coloquei o suspend antes do ultimo end e o primeiro if continua não retornando a exeption
GOSTEI 0
Emerson Nascimento
05/04/2005
tente assim:
CREATE PROCEDURE VALIDA_USUARIO ( PAR_NOME_USUARIO VARCHAR(10), PAR_SENHA_USUARIO VARCHAR(10)) RETURNS ( R_CODIGO INTEGER, R_NOME VARCHAR(10), R_SENHA VARCHAR(10), R_ATIVO VARCHAR(1), R_DATA_EXP DATE, R_VALIDO VARCHAR(1)) AS BEGIN FOR SELECT usuarios.codigo, usuarios.nome, usuarios.senha, usuarios.ativo, usuarios.data_expiracao FROM usuarios WHERE usuarios.NOME = :par_nome_usuario AND usuarios.senha = :par_senha_usuario INTO :R_CODIGO, :R_NOME, :R_SENHA, :R_ATIVO, :R_DATA_EXP DO BEGIN IF (:R_NOME is null) THEN EXCEPTION USUARIO_SENHA_INVALIDO ELSE IF (:R_ATIVO <> ´S´) THEN EXCEPTION USUARIO_DESATIVADO ELSE IF (:R_DATA_EXP is null) or (:R_DATA_EXP >= CURRENT_TIMESTAMP) THEN r_valido = ´S´ ELSE IF (:R_DATA_EXP < CURRENT_TIMESTAMP) then EXCEPTION usuario_expirado; SUSPEND; END END
GOSTEI 0