CASE error

di il
8 risposte

CASE error


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

  • Re: CASE error

    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)
  • Re: CASE error

    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
  • Re: CASE error

    Allora prova ad aggiungere le parentesi tonde :

    - dopo IN
    - dopo END
  • Re: CASE error

    gibra ha scritto:


    Allora prova ad aggiungere le parentesi tonde :

    - dopo IN
    - dopo END
    Provato ma continua a dare lo stesso errore..
  • Re: CASE error

    pipposql ha scritto:


    Provato ma continua a dare lo stesso errore..
    A me aggiungendo le parentesi funziona bene, non so cosa dirti.
  • Re: CASE error

    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
  • Re: CASE error

    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
  • Re: CASE error

    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