stored procedure verificando dados

Firebird

03/02/2006

tenho uma procedure que teria que verificar se o usuario existe, caso ele não exista na tabela ele é cadastrado, se ele existir é feito um update, mas o processo não esta sendo concluido o que pode estar errado


CREATE PROCEDURE DEFINICAO_DIREITOS (
I_COD_USURIO INTEGER,
I_ACESS_ARQUIVO CHAR(1),
I_ACESS_BAIRRO CHAR(1),
I_ACESS_CLIENTE CHAR(1),
I_ACESS_EMPRESA CHAR(1),
I_ACESS_ESTOQUE CHAR(1),
I_ACESS_FORNECEDOR CHAR(1),
I_ACESS_FUNCIONARIO CHAR(1),
I_ACESS_GRUPO CHAR(1),
I_ACESS_MODELO CHAR(1),
I_ACESS_PARAMETROS CHAR(1),
I_ACESS_PESSOAS CHAR(1),
I_ACESS_PRODUTOS CHAR(1))

returns (VERIFICA_USUARIO INTEGER)
AS

BEGIN
FOR
SELECT FD_CODIGO_FUNC

FROM funcionario_direitos

WHERE FD_CODIGO_FUNC = :i_cod_usurio

into :VERIFICA_USUARIO

DO

IF (:verifica_usuario IS NULL) THEN
BEGIN
INSERT INTO funcionario_direitos (
FD_CODIGO_FUNC,
FD_ACESSA_ARQUIVO,
FD_ACESSA_PESSOA,
FD_ACESSA_CLIENTE,
FD_ACESSA_FORNECEDOR,
FD_ACESSA_BAIRRO,
FD_ACESSA_FUNCIONARIO,
FD_ACESSA_ESTOQUE,
FD_ACESSA_GRUPO,
FD_ACESSA_MODELO,
FD_ACESSA_PRODUTOS,
FD_ACESSA_EMPRESA,
FD_ACESSA_PARAMETROS
)
VALUES (
:I_COD_USURIO,
:I_ACESS_ARQUIVO,
:I_ACESS_PESSOAS,
:I_ACESS_CLIENTE,
:I_ACESS_FORNECEDOR,
:I_ACESS_BAIRRO,
:I_ACESS_FUNCIONARIO,
:I_ACESS_ESTOQUE,
:I_ACESS_GRUPO,
:I_ACESS_MODELO,
:I_ACESS_PRODUTOS,
:I_ACESS_EMPRESA,
:I_ACESS_PARAMETROS
);

WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_INSERT;
END

ELSE

BEGIN
UPDATE funcionario_direitos SET
FD_ACESSA_ARQUIVO = :I_ACESS_ARQUIVO,
FD_ACESSA_PESSOA = :I_ACESS_BAIRRO,
FD_ACESSA_CLIENTE = :I_ACESS_CLIENTE,
FD_ACESSA_FORNECEDOR = :I_ACESS_FORNECEDOR,
FD_ACESSA_BAIRRO = :I_ACESS_BAIRRO,
FD_ACESSA_FUNCIONARIO = :I_ACESS_FUNCIONARIO,
FD_ACESSA_ESTOQUE = :I_ACESS_ESTOQUE,
FD_ACESSA_GRUPO = :I_ACESS_GRUPO,
FD_ACESSA_MODELO = :I_ACESS_MODELO,
FD_ACESSA_PRODUTOS = :I_ACESS_PRODUTOS,
FD_ACESSA_EMPRESA = :I_ACESS_EMPRESA,
FD_ACESSA_PARAMETROS = :I_ACESS_PARAMETROS

WHERE FD_CODIGO_FUNC = :i_cod_usurio;

WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_UPDATE;
END
END


Uiliangurjon

Uiliangurjon

Curtidas 0

Respostas

Uiliangurjon

Uiliangurjon

03/02/2006

alguem pode me ajudar


GOSTEI 0
Uiliangurjon

Uiliangurjon

03/02/2006

Fiz dessa maneira e funcionou


CREATE PROCEDURE DEFINICAO_DIREITOS (
I_COD_USURIO INTEGER,
I_ACESS_ARQUIVO CHAR(1),
I_ACESS_BAIRRO CHAR(1),
I_ACESS_CLIENTE CHAR(1),
I_ACESS_EMPRESA CHAR(1),
I_ACESS_ESTOQUE CHAR(1),
I_ACESS_FORNECEDOR CHAR(1),
I_ACESS_FUNCIONARIO CHAR(1),
I_ACESS_GRUPO CHAR(1),
I_ACESS_MODELO CHAR(1),
I_ACESS_PARAMETROS CHAR(1),
I_ACESS_PESSOAS CHAR(1),
I_ACESS_PRODUTOS CHAR(1))
RETURNS (
VERIFICA_USUARIO INTEGER)
AS
BEGIN
FOR
SELECT FD_CODIGO_FUNC

FROM funcionario_direitos

WHERE FD_CODIGO_FUNC = :i_cod_usurio

into :VERIFICA_USUARIO

DO
suspend;

IF (:verifica_usuario IS NULL) THEN
BEGIN
INSERT INTO funcionario_direitos (
FD_CODIGO_FUNC,
FD_ACESSA_ARQUIVO,
FD_ACESSA_PESSOA,
FD_ACESSA_CLIENTE,
FD_ACESSA_FORNECEDOR,
FD_ACESSA_BAIRRO,
FD_ACESSA_FUNCIONARIO,
FD_ACESSA_ESTOQUE,
FD_ACESSA_GRUPO,
FD_ACESSA_MODELO,
FD_ACESSA_PRODUTOS,
FD_ACESSA_EMPRESA,
FD_ACESSA_PARAMETROS
)
VALUES (
:I_COD_USURIO,
:I_ACESS_ARQUIVO,
:I_ACESS_PESSOAS,
:I_ACESS_CLIENTE,
:I_ACESS_FORNECEDOR,
:I_ACESS_BAIRRO,
:I_ACESS_FUNCIONARIO,
:I_ACESS_ESTOQUE,
:I_ACESS_GRUPO,
:I_ACESS_MODELO,
:I_ACESS_PRODUTOS,
:I_ACESS_EMPRESA,
:I_ACESS_PARAMETROS
);

WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_INSERT;
END

IF (:verifica_usuario IS NOT NULL) THEN
BEGIN
UPDATE funcionario_direitos SET
FD_ACESSA_ARQUIVO = :I_ACESS_ARQUIVO,
FD_ACESSA_PESSOA = :I_ACESS_BAIRRO,
FD_ACESSA_CLIENTE = :I_ACESS_CLIENTE,
FD_ACESSA_FORNECEDOR = :I_ACESS_FORNECEDOR,
FD_ACESSA_BAIRRO = :I_ACESS_BAIRRO,
FD_ACESSA_FUNCIONARIO = :I_ACESS_FUNCIONARIO,
FD_ACESSA_ESTOQUE = :I_ACESS_ESTOQUE,
FD_ACESSA_GRUPO = :I_ACESS_GRUPO,
FD_ACESSA_MODELO = :I_ACESS_MODELO,
FD_ACESSA_PRODUTOS = :I_ACESS_PRODUTOS,
FD_ACESSA_EMPRESA = :I_ACESS_EMPRESA,
FD_ACESSA_PARAMETROS = :I_ACESS_PARAMETROS

WHERE FD_CODIGO_FUNC = :i_cod_usurio;

WHEN SQLCODE -625 DO
EXCEPTION ERRO_CAMPOS_OBRIGATORIOS;
WHEN ANY DO
EXCEPTION ERRO_UPDATE;
END
END


GOSTEI 0
POSTAR