Execute Statement no Firebird, uso avançado.

Execute Statement a Fundo …

Mudando um pouco de não só o execute stament, imagine que o usuário possui um Nível que está ligado a verificação de registros de vários setores e que o Nível 1 tem acesso a todos os setores.

Ex:
Setor :
1 – ADM
2 – CONSERVA
3 – PEDÁGIO

Usuários :
Cód. – Nome – Nível
1 – SÁVIO – 2
2 – BRANDINO – 2
3 – DIRETOR – 1

Acessos :
2 CONSERVA – 1 SÁVIO
3 PEDÁGIO – 2 BRANDINO
1 ADM – 3 DIRETOR
2 CONSERVA – 3 DIRETOR
3 PEDÁGIO – 3 DIRETOR

Quando o usuário incluir o usuário com o nível um na tabela de acessos terá que ser criado um acesso para cada setor já que ele é o nível 1 que tem acesso a todos os setores.

CREATE PROCEDURE SP_LOGON_INCLUI (
LOGON VARCHAR(20),
SENHA VARCHAR(10),
NIVEL INTEGER)
AS
DECLARE VARIABLE VCODIGOSETOR INTEGER;
DECLARE VARIABLE VCODIGOLOGON INTEGER;
BEGIN
INSERT INTO LOGON ( LOGON, SENHA, NIVEL)
VALUES ( :LOGON, :SENHA, :NIVEL);

SELECT CODIGOLOGON FROM LOGON WHERE LOGON = :LOGON AND SENHA = :SENHA AND NIVEL = :NIVEL INTO :VCODIGOLOGON;

IF (:NIVEL = 1) THEN
BEGIN
FOR
SELECT CODIGOSETOR FROM SETOR INTO :VCODIGOSETOR
DO
INSERT INTO ACESSOS (CODIGOSETOR, CODIGOLOGON) VALUES (:VCODIGOSETOR, :VCODIGOLOGON);
END

WHEN SQLCODE -803 DO
EXCEPTION CHAVE;
END

CREATE PROCEDURE SP_LOGON_ALTERA (
CODIGOLOGON INTEGER,
LOGON VARCHAR(20),
SENHA VARCHAR(10),
NIVEL INTEGER)
AS
BEGIN
IF (:NIVEL = 1) THEN
BEGIN
EXCEPTION ERRO ‘PARA O NÍVEL ‘ || :NIVEL || ‘ DO USUÁRIO ‘ || :LOGON || ‘ NÃO É POSSÍVEL ALTERAÇÃO’;
EXIT;
END
ELSE
BEGIN
UPDATE LOGON
SET LOGON = :LOGON, SENHA = :SENHA, NIVEL = :NIVEL
WHERE (CODIGOLOGON = :CODIGOLOGON);
END
END

CREATE PROCEDURE SP_LOGON_EXCLUI (
CODIGOLOGON INTEGER)
AS
DECLARE VARIABLE VNOME VARCHAR(100);
BEGIN
SELECT LOGON
FROM LOGON L, ACESSOS A
WHERE L.CODIGOLOGON = A.CODIGOLOGON INTO :VNOME;

DELETE FROM LOGON
WHERE CODIGOLOGON = :CODIGOLOGON;

WHEN SQLCODE -530 DO
EXCEPTION RELACIONAMENTO ‘NÃO É POSSÍVEL EXCLUIR O ACESSO DO USUÁRIO ‘ || VNOME;
END

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s