CREATE PROCEDURE ze_SenhaAddModule( cModule VARCHAR(60), cModuleOld VARCHAR(60) )
BEGIN
INSERT
INTO JPSENHA
( PWTYPE, PWFIST, PWLAST )
SELECT DISTINCT
'A', PWFIRST, cModule
FROM JPSENHA
WHERE PWTYPE='A' AND PWLAST = cModuleOld
AND NOT EXISTS ( SELECT PWLAST FROM JPSENHA AS B
WHERE PWTYPE = 'A' AND B.PWFIRST=JPSENHA.PWFIRST
AND PWLAST=cModule );
END
Qual o objetivo?
Vai liberar um módulo (cModule) para TODOS os usuários que tenham acesso a outro modulo (cModuleOld)
SELECT PWFIRST FROM JPSENHA WHERE PWTYPE='A' AND PWLAST=cModuleOld
Isto vai trazer os usuários com acesso ao módulo base
Até aqui tudo bem, iria inserir PWTYPE='A' AND PWFIRST=resultado anterior AND PWLAST=cModule
Mas queria testar se já existe, e só incluir se faltar.
À primeira vista, o comando acima funciona mas... o OUTER JOIN não seria adequado pra isso?
E é tudo encima da mesma tabela, o que atrapalha relacionamento.