CASE error

Forum dedicato interamente ad Oracle

Moderatore: Toki

Regole del forum
Leggi: IProgrammatori.it - Regolamento Forum
pipposql
New Entry
Messaggi: 5
Iscritto il: 06 dic 2016, 10:07

CASE error

Messaggioda pipposql » 06 dic 2016, 10:31

Codice: Seleziona tutto

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
Avatar utente
gibra
Utente Senior
Messaggi: 1128
Iscritto il: 14 gen 2013, 12:14
Contatta:

Re: CASE error

Messaggioda gibra » 06 dic 2016, 11:34

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)
HTH
gibra

Windows 7 Ultimate SP1 64 bit
Office Automation in NET: VS2010 - Early-Late Binding: con Excel - con Word
Office Automation in VB6: Early-Late Binding: con Excel - con Outlook
NEW! VS6 Installer 4.5 02/26/2016: install VS6/VB6 (Ent/Pro) on Windows 2000/XP/Vista/7/8/10 (32/64) any version & Service pack
see YouTube Complete video tutorial
pipposql
New Entry
Messaggi: 5
Iscritto il: 06 dic 2016, 10:07

Re: CASE error

Messaggioda pipposql » 06 dic 2016, 15:52

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
Avatar utente
gibra
Utente Senior
Messaggi: 1128
Iscritto il: 14 gen 2013, 12:14
Contatta:

Re: CASE error

Messaggioda gibra » 06 dic 2016, 17:27

Allora prova ad aggiungere le parentesi tonde :

- dopo IN
- dopo END
HTH
gibra

Windows 7 Ultimate SP1 64 bit
Office Automation in NET: VS2010 - Early-Late Binding: con Excel - con Word
Office Automation in VB6: Early-Late Binding: con Excel - con Outlook
NEW! VS6 Installer 4.5 02/26/2016: install VS6/VB6 (Ent/Pro) on Windows 2000/XP/Vista/7/8/10 (32/64) any version & Service pack
see YouTube Complete video tutorial
pipposql
New Entry
Messaggi: 5
Iscritto il: 06 dic 2016, 10:07

Re: CASE error

Messaggioda pipposql » 06 dic 2016, 17:31

gibra ha scritto:Allora prova ad aggiungere le parentesi tonde :

- dopo IN
- dopo END


Provato ma continua a dare lo stesso errore.. :?
Avatar utente
gibra
Utente Senior
Messaggi: 1128
Iscritto il: 14 gen 2013, 12:14
Contatta:

Re: CASE error

Messaggioda gibra » 06 dic 2016, 17:38

pipposql ha scritto:Provato ma continua a dare lo stesso errore.. :?


A me aggiungendo le parentesi funziona bene, non so cosa dirti.
HTH
gibra

Windows 7 Ultimate SP1 64 bit
Office Automation in NET: VS2010 - Early-Late Binding: con Excel - con Word
Office Automation in VB6: Early-Late Binding: con Excel - con Outlook
NEW! VS6 Installer 4.5 02/26/2016: install VS6/VB6 (Ent/Pro) on Windows 2000/XP/Vista/7/8/10 (32/64) any version & Service pack
see YouTube Complete video tutorial
pipposql
New Entry
Messaggi: 5
Iscritto il: 06 dic 2016, 10:07

Re: CASE error

Messaggioda pipposql » 07 dic 2016, 11:52

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:

Codice: Seleziona tutto

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
Avatar utente
gibra
Utente Senior
Messaggi: 1128
Iscritto il: 14 gen 2013, 12:14
Contatta:

Re: CASE error

Messaggioda gibra » 07 dic 2016, 12:12

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/se ... ons013.htm
HTH
gibra

Windows 7 Ultimate SP1 64 bit
Office Automation in NET: VS2010 - Early-Late Binding: con Excel - con Word
Office Automation in VB6: Early-Late Binding: con Excel - con Outlook
NEW! VS6 Installer 4.5 02/26/2016: install VS6/VB6 (Ent/Pro) on Windows 2000/XP/Vista/7/8/10 (32/64) any version & Service pack
see YouTube Complete video tutorial
pipposql
New Entry
Messaggi: 5
Iscritto il: 06 dic 2016, 10:07

Re: CASE error

Messaggioda pipposql » 07 dic 2016, 13:54

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/se ... ons013.htm


Io utilizzo Oracle SQL Developer e l'errore permane.. f30
Questa query dovrò inserirla in un report .jrxml per la generazione di un file pdf.
Qualcuno può aiutarmi a risolvere?

Grazie

Torna a “Oracle”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti