stored procedure verificando dados
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
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
Curtidas 0
Respostas
Uiliangurjon
03/02/2006
alguem pode me ajudar
GOSTEI 0
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
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