[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