Pular para o conteúdo

Fóruns SQL e PL/SQL [RESOLVIDO] Duvida Select [RESOLVIDO] Duvida Select

#96062
burga
Participante

    Só lembrando que SQL dinâmico é quase um sinônimo de performance ruim, pois na maioria das vezes o Oracle vai ter que executar o hard parsing do seu SQL dinâmico, então é sempre bom (se possível) tentar evitar seu uso.

    Outra coisa, eu não prestei muita atenção no seu código e foquei mais na solução do erro, agora que vi melhor, percebi que a consulta que você está gerando é a mesma do começo do tópico, então já vou apontar dois problemas no código que você postou, um de semântica e outro de lógica:

    OPEN P_CURSOR FOR
    SELECT DTAGENDA
    FROM (
    SELECT DISTINCT A.DTAGENDA, B.IDTUSS
    FROM AGENDA_DETAIL A
    JOIN AGENDA_DADO B ON ( A.IDAGENDADADO = B.IDAGENDADADO )
    JOIN AGENDA_SALA C ON ( B.IDSALA = C.IDSALA )
    WHERE A.FLAG = ‘DISPONIVEL’ AND
    A.STATUS = ‘ATIVADO’ AND
    C.IDPRESTADORDETAIL = 1421 AND
    B.IDMEDICOESPECIALIDADE = 400 AND
    B.IDTUSS = V_QUERYCOMPL)
    GROUP BY DTAGENDA
    HAVING COUNT(*) > 1;

    Um dos problemas é que você não colocou as condições com B.IDTUSS entre parênteses, sem isso a consulta não vai ser executada da forma que você deseja, uma forma simples de resolver isto é usar o IN ao invés de vários OR (ex.: B.IDTUSS IN (codigo1[,codigoN…]) )…

    Outro problema é o HAVING COUNT() > 1, este caso serve apenas para quando você procura datas que possuem em dois IDTUSS, caso sejam três IDTUSS então deve ser HAVING COUNT() > 2, e para N IDTUSS diferentes seria HAVING COUNT(*) > (N-1);