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