› Fóruns › SQL e PL/SQL › [RESOLVIDO] Duvida Select › [RESOLVIDO] Duvida Select
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);