[firebase-br] Suprimir Exception em Procedure Firebird
Eurides Baptistella
eurides.baptistella em gmail.com
Ter Jul 5 21:06:49 -03 2011
Galera, estou precisando da ajuda dos nobres amigos.
Meu problema é decorrente da criação de usuários/role no Firebird,
como sabem o Fb 1.5 não oferece o recurso de Create User através de
instrução SQL, deve ser feito pelo gbak (que no meu caso tenho que
evitar).
Estou trabalhando com a ideia de criar uma procedure que será
executada independente da versão do Firebird, e obviamente quando
executada em Firebird 1.5 vai ocasionar um erro, e esse quero suprimir
(esconder) .
Tenho a seguinte procedure dentro de uma DLL (existem mais comandos SQL....):
CREATE PROCEDURE CRIAR_USUARIO ()
AS BEGIN
/* verifica a existencia do role LIMITADO */
if (not exists(select 1 from rdb$role where
rTrim($rdb$role_name)='LIMITADO')) then
EXECUTE STATEMENT 'CREATE ROLE LIMITADO';
end if;
/* GRANT PARA A TABELA DESEJADA */
GRANT SELECT ON TABELA TO LIMITADO;
/* cria o usuário */
EXECUTE STATEMENT 'CREATE USER CONSULTA';
/* atribui o role LIMITADO ao usuario CONSULTA*/
EXECUTE STATEMENT 'GRANT LIMITADO TO CONSULTA';
WHEN ANY DO
BEGIN
EXIT;
END;
END;
insert into tabela (1, 2);
insert into tabela (1, 2);
Ps: Podem haver erros de compilação pois fiz sem testar (estou em casa)
Para a primeira Database funciona legal, mas quando executo em um
servidor com mais Databases o comando Create User retorna erro e cai
no EXIT matando a execução de outras rotinas.
Gostaria de saber de vocês, qual seria a melhor opção para que eu
tenha meus usuários criados, minhas roles criadas sem dor de cabeça.
att.
--
Eurides V. Baptistella
E-mail: eurides.baptistella em gmail.com
Fone: +55 (49) 9125-6572
Mais detalhes sobre a lista de discussão lista