[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