Realmente Dickson, nesses termos é complicado para o interpretador, embora
não impossível. Ainda bem que não é algo crítico e há alternativas bem
viáveis.
A idéia do tópico era só discutir a possibilidade mesmo.

Obrigado a todos pelas dicas.


Em 28 de novembro de 2012 15:52, Dickson S. Guedes
<[email protected]>escreveu:

> Em 28 de novembro de 2012 15:40, Anselmo Silva <[email protected]>
> escreveu:
> >> >> > gostaria de um retorno boolean para
> >> >> >
> >> >> > SELECT A=B=C=D=E=F=G=H.... é possível numa só declaração SQL sem
> sem
> >> >> > saber o
> >> >> > numero de elementos?
> >> >> >
> >> >> Seja mais específico... Qual o tipo dos elementos? Quem fornecerá
> esses
> >> >> elementos? Você montará esta consulta dinamicamente em uma linguagem
> de
> >> >> programação?
> >> >>
> >> >> world=# SELECT (1 = 2) and (1 <> 3);
> >> >>  ?column?
> >> >> ──────────
> >> >>  f
> >> >> (1 registro)
> >> >>
> >> >
> >> > Os elementos são NUMERIC, os elementos são campos de uma tabela e a
> >> > consulta
> >> > não é dinâmica. Quero saber se são todos iguais então teorizei o
> select
> >> > acima citado.
> >> > Eu posso usar sua abordagem, apenas teorizei se era possível outra
> >> > abordagem
> >> > apenas com operadores '=', já que é 'humanamente' lógico pois qualque
> >> > elemento diferente retornaria Falso.
> >>
> >>
> >> AFAICS, não faz parte da linguagem SQL esta sintaxe, entretanto o
> >> operador '='  recebe dois parametros
> >> o 'esquerda' e o 'direita', e o PostgreSQL converte isto para algo
> >> como pg_catalog.equal(direita, esquerda)
> >> o que acaba impossibilitando esta sintaxe também para o operador '='
> >>
> >> Mas voce pode fazer de outra maneira...
> >>
> >> postgres=# select a = ALL(ARRAY[a,b,c])  from (SELECT 1 as a, 2 as b,
> >> 3 as c, 1) as x;
> >>  ?column?
> >> ----------
> >>  f
> >> (1 row)
> >>
> >>
> >> postgres=# select a = ALL(ARRAY[a,b,c])  from (SELECT 1 as a, 1 as b,
> >> 1 as c, 1) as x;
> >>  ?column?
> >> ----------
> >>  t
> >> (1 row)
> >>
> >
> > A função all realmente resolve e bem é limpa. apenas comentando a
> resposta
> > do Dickson:
> >
> > Acha que seria algo interessante a se implementar? Visto que, como posso
> > fazer SELECT A+B+C+D+ETC...
> > seria um Ctrl+C e Ctrl+V no operador de soma (grosseiramente falando
> hehe).
>
> Você pode fazer operadores especiais, veja que ao fazer
>
> select 1=2=3;
> ERROR:  operator does not exist: integer = boolean
> LINE 1: select 1=2=3;
>
> O erro que dá é porque a saída de uma expressão, que no caso é
> booleana, é passada para a entrada da outra expressão, e neste caso
> não tem como comparar um boolean de uma expressão (1=2 que retorna
> false) com o inteiro da outra ( false = 3 por exemplo). Já no caso do
> + isto funciona porque as somas podem ser concatenadas.
>
> No caso da soma ficaria
>
> select 1+2+3;
>
> é expandido para algo como (o nome 'plus' é hipotético):
>
> SELECT plus(plus(1,2),3)
>
> Já este:
>
> SELECT 1+2+3;
>
> seria expandido para algo como (o nome 'plus' é hipotético):
>
> SELECT equal(equal(1,2), 3);
>
> porém equal(x, y) retorna boolean, mas x e y precisam ser integer.
>
> Você pode criar um operador que espera (boolean, integer) mas isto não
> resolveria o seu caso. Talvez um tipo composto.
>
> Basicamente seria isto.
>
> []s
> --
> Dickson S. Guedes
> mail/xmpp: [email protected] - skype: guediz
> http://guedesoft.net - http://www.postgresql.org.br
> _______________________________________________
> pgbr-geral mailing list
> [email protected]
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>



-- 
Anselmo M. Silva
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a