[firebase-br] Ajuda num UPDATE

Sandro Souza escovadordebits em gmail.com
Seg Mar 21 16:00:43 -03 2011


Bom dia/tarde Henrique.

Grande Henrique, posso estar falando besteira, mas tente usar um alias 
p/ informar que a tabela CONTPGRC do SELECT interno é exatamente a mesma 
do UPDATE externo, ou seja, que se trata do mesmo registro, como por 
exemplo:

UPDATE CONTPGRC C SET
   C.CPR_VALCOMISS = '5',
   C.CPR_DTCOMISS = '17.03.2010',
   C.CPR_COMISSQUITA = '1',
   C.cpr_dtcomemorativa = (
     SELECT
       T.data_comemorativa
     FROM
       tclassificado T
     WHERE
       T.cd_cla = C.cla_codigo)
WHERE
     (C.CPR_COMISSQUITA = 0)
AND (C.CPR_CODIGO IN (
       SELECT
         CONTPGRC.cpr_codigo
       from
         contpgrc
           inner join tclassificado
             on (tclassificado.cd_cla = contpgrc.cla_codigo))
AND (C.cpr_tipocomiss = 'ANUNCIO')
AND (C.CPR_FUNCOMISS = '101550')
AND (C.CPR_DTIN between '01.02.2010' AND '31.12.2011')

Caso ainda sejam retornados mais de um registro no primeiro SELECT 
interno, então use FIRST 1 nele.

Outra dúvida: Será que o SELECT interno do WHERE principal, com relação 
ao CPR_CODIGO poderia ser melhorado?

Por exemplo, será que a seguinte condição:

AND (C.CPR_CODIGO IN (
       SELECT
         CONTPGRC.cpr_codigo
       from
         contpgrc
           inner join tclassificado
             on (tclassificado.cd_cla = contpgrc.cla_codigo))

Poderia ser trocada por:

AND (C.CLA_CODIGO IN(SELECT CD_CLA FROM TCLASSIFICADO))

É uma questão que só você pode resolver porque só você conhece a lógica 
do seu SELECT.

Espero ter ajudado mais que atrapalhado. :D


Em 21-03-2011 12:41, Henrique Ribeiro escreveu:
> UPDATE CONTPGRC SET
> CONTPGRC.CPR_VALCOMISS  = '5',
> CONTPGRC.CPR_DTCOMISS = '17.03.2010',
> CONTPGRC.CPR_COMISSQUITA    = '1' ,
> CONTPGRC.cpr_dtcomemorativa =  (SELECT tclassificado.data_comemorativa from
> tclassificado
>     inner join contpgrc   on (tclassificado.cd_cla =
> contpgrc.cla_codigo) ) *//aqui
> retorna mais de uma linha*
>
> WHERE CONTPGRC.CPR_COMISSQUITA = 0
> AND CONTPGRC.CPR_CODIGO IN (SELECT CONTPGRC.cpr_codigo from contpgrc
>     inner join tclassificado  on (tclassificado.cd_cla = contpgrc.cla_codigo)
> )
>
>   AND CONTPGRC.cpr_tipocomiss = 'ANUNCIO'
>   AND CONTPGRC.CPR_FUNCOMISS = '101550'
>   AND CONTPGRC.CPR_DTIN between '01.02.2010' AND '31.12.2011'




Mais detalhes sobre a lista de discussão lista