[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