[firebase-br] Suprimir Exception em Procedure Firebird
Tecnobyte Informática
temp2 em tecnobyte.com.br
Ter Jul 5 21:38:44 -03 2011
Salvo engano, a cláusula WHEN está associada ao BEGIN..END. Sendo assim,
você poderia montar vários blocos BEGIN..END com vários WHENs. Mais ou menos
assim:
BEGIN
BEGIN
Comando1;
WHEN...
END
BEGIN
Comando2;
WHEN...
END
END^
Atenciosamente.
Daniel P. Guimarães
Tecnobyte Informática
www.tecnobyte.com.br
-----Mensagem Original-----
From: Eurides Baptistella
Sent: Tuesday, July 05, 2011 8:06 PM
To: FireBase
Subject: [firebase-br] Suprimir Exception em Procedure Firebird
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