[firebase-br] Ajuda com Select

Julio F. Figueiredo tuskinhu em gmail.com
Qua Maio 25 17:49:18 -03 2016


Tenho essa procedure:

CREATE OR ALTER procedure STP_CRIA_DM (
  NOME_DOMAIN varchar(31) character set WIN1252 collate WIN_PTBR,
  TIPO        varchar(1) character set WIN1252 collate WIN_PTBR,
  TAMANHO     integer = 0)
as
  declare variable COMANDO varchar(100) character set WIN1252;
begin
  if (TIPO not in ('N', 'I', 'B', 'D', 'H', 'T', 'V')) then
    exception E_CRIA_DM_TIPO 'Erro ao informar o tipo de campo. Informado:
Tipo = ' || :TIPO || ascii_char(13) || ascii_char(10) ||
             'Possíveis são: N = Numérico com decimal, I = Inteiros, B =
Byte, D = Data, H = Hora, T = TimeStamp, V = AlfaNuméricos';

  if (not exists(select
                   RDB$FIELD_NAME
                 from
                   RDB$FIELDS
                 where
                   upper(RDB$FIELD_NAME) = upper(:NOME_DOMAIN))) then
  begin
    COMANDO = '';

    if (TIPO = 'N') then
      COMANDO = 'CREATE DOMAIN ' || :NOME_DOMAIN || ' AS DOUBLE PRECISION';
    else if (TIPO = 'I') then
      COMANDO = 'CREATE DOMAIN ' || :NOME_DOMAIN || ' AS INTEGER';
    else if (TIPO = 'B') then
      COMANDO = 'CREATE DOMAIN ' || :NOME_DOMAIN || ' AS SMALLINT';
    else if (TIPO = 'D') then
      COMANDO = 'CREATE DOMAIN ' || :NOME_DOMAIN || ' AS DATE';
    else if (TIPO = 'H') then
      COMANDO = 'CREATE DOMAIN ' || :NOME_DOMAIN || ' AS TIME';
    else if (TIPO = 'T') then
      COMANDO = 'CREATE DOMAIN ' || :NOME_DOMAIN || ' AS TIMESTAMP';
    else if (TIPO = 'V') then
      COMANDO = 'CREATE DOMAIN ' || :NOME_DOMAIN || ' AS VARCHAR(' ||
cast(TAMANHO as integer) || ') CHARACTER SET WIN1252 COLLATE WIN_PTBR';

    execute statement COMANDO;
  end
end


________________________________________
Att,
*Julio F. Figueiredo*
*Analista de Sistemas*

Em 25 de maio de 2016 14:57, Fabiano P. <fabianopassianoto em gmail.com>
escreveu:

> Olá Colegas..
>
> Trombei um dilema ressente, serve de desafio, até agora não conseguir
> resolver, será que alguém pode me ajudar?
>
> A teoria lógica que necessito é.
>
> *if  Select Domain = false then*
> *     create domain*
>
> Preciso disso dentro das sintases do Firebird
> Criar apenas um Domain se ele já existir.
>
> *CREATE DOMAIN TESTE VARCHAR(50);*
>
> Um select pra descobrir se o DOMAIN existe seria este:
>
> * SELECT*
> *       count (RDB$FIELDS.RDB$FIELD_NAME)*
> *    FROM*
> *       RDB$FIELDS*
> *    INNER JOIN RDB$RELATION_FIELDS*
> *        ON (RDB$RELATION_FIELDS.RDB$FIELD_SOURCE =
> RDB$FIELDS.RDB$FIELD_NAME)*
> *    WHERE*
> *       RDB$FIELDS.RDB$SYSTEM_FLAG = 0*
> *       and RDB$FIELDS.RDB$FIELD_NAME = :domain*
> *    GROUP BY*
> *       RDB$FIELDS.RDB$FIELD_NAME *
>
>
> Se o count retormar mais que 0 ou null, significa que o Domain existe.
> Mas eu preciso disso, naquele contexto, será que é possível isso?
>
>
>
>
> ---------------------
> Fabiano P.
> Analista de Sistemas/Programador
> Tecnologia de Informação e Vivencia - http://blogdamemoria.blogspot.com
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas:
> http://www.firebase.com.br/pesquisa_lista.html
>



Mais detalhes sobre a lista de discussão lista