[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