CASE error

di Anonimizzato20508 il
8 risposte

SELECT
[...]
FROM tqdo_dp_fornitura frn
WHERE frn.id_domanda = $P{ID_DOMANDA} 
AND frn.pkid IN CASE
                		WHEN  $P{PKID} IS NOT NULL
                  			THEN  $P{PKID}
                		ELSE (select pkid from tqdo_dp_fornitura where id_domanda = $P{ID_DOMANDA})
              		END
Coma mai nel lancio di tale codice viene fuori l'errore 'ORA-01427: single-row subquery returns more than one row' ??
E' vero che dalla select che segue ELSE vengono restituite più righe ma è anche vero che ho inserito l' IN prima del CASE.

Grazie a tutti

8 Risposte

  • Non ho Oracle sottomano, ma suppongo che sia perché IN richiede una subquery (quindi l'ELSE è ok) , mentre nel CASE WHEN tu proponi un valore $P(KID)
  • gibra ha scritto:


    Non ho Oracle sottomano, ma suppongo che sia perché IN richiede una subquery (quindi l'ELSE è ok) , mentre nel CASE WHEN tu proponi un valore $P(KID)
    Grazie della risposta gibra ma se verificata la prima condizione del case l'errore non si presenta. L'errore viene dato solo quando la prima condizione è falsa e quindi si sviluppa l'ELSE
  • Allora prova ad aggiungere le parentesi tonde :

    - dopo IN
    - dopo END
  • gibra ha scritto:


    Allora prova ad aggiungere le parentesi tonde :

    - dopo IN
    - dopo END
    Provato ma continua a dare lo stesso errore..
  • pipposql ha scritto:


    Provato ma continua a dare lo stesso errore..
    A me aggiungendo le parentesi funziona bene, non so cosa dirti.
  • gibra ha scritto:


    pipposql ha scritto:


    Provato ma continua a dare lo stesso errore..
    A me aggiungendo le parentesi funziona bene, non so cosa dirti.
    Scusami gibra, io ho provato così e continua a darmi errore:
    
    SELECT *
    FROM FASCICOLO_ADM.tqdo_dp_fornitura frn
    WHERE frn.id_domanda = 228946 
    AND frn.pkid IN (CASE
                    WHEN  5448 IS NULL
                      THEN  5448
                    ELSE (select pkid from tqdo_dp_fornitura where id_domanda = 228946 )
                  END)
    
    Tu hai messo le parentesi diversamente?
    PS: ho indicato quella prima condizione del CASE per permettere di entrare nell'ELSE.

    Grazie
  • No, le parentesi sono corrette.
    Io ho provatu su SQL Server e, come ti ho detto, funziona.

    Dovesti togliere le due parentesi dopo ELSE...
    Avendole già messe, correttamente, nell'operatore IN ( ...) non dovrebbero esserci.
    Ho controllato per sicurezza anche per Oracle, ed è come in SQL Server:

    IN Condition
    https://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm
  • gibra ha scritto:


    No, le parentesi sono corrette.
    Io ho provatu su SQL Server e, come ti ho detto, funziona.

    Dovesti togliere le due parentesi dopo ELSE...
    Avendole già messe, correttamente, nell'operatore IN ( ...) non dovrebbero esserci.
    Ho controllato per sicurezza anche per Oracle, ed è come in SQL Server:

    IN Condition
    https://docs.oracle.com/cd/B19306_01/server.102/b14200/conditions013.htm
    Io utilizzo Oracle SQL Developer e l'errore permane..
    Questa query dovrò inserirla in un report .jrxml per la generazione di un file pdf.
    Qualcuno può aiutarmi a risolvere?

    Grazie
Devi accedere o registrarti per scrivere nel forum
8 risposte