[POSTGRESQL/ PGSQL] Switch/Case expressie toekenning

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Op Postgres versie 8.1 ben ik bezig een stored procedure hierin wil ik een case statement implementeren:

SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
_result
_var1 varchar;

    SELECT CASE _fictief
        WHEN _fictief= 'a' THEN 
            _var1:= ' foo ' || _vector
            _var1:= ' bar ' || _vector
        WHEN _fictief= 'b' THEN
            _var1:= ' bar ' || _vector
            _var1:= ' foo ' || _vector
        ELSE ''
    INTO _result
    END;


Bovenstaande werkt niet door de toekenning, ik zou niet weten hoe ik dat moet aanpakken!
SQL:
1
2
3
4
5
6
SELECT a,
       CASE WHEN a=1 THEN 'one'
            WHEN a=2 THEN 'two'
            ELSE 'other'
       END
FROM test;


Bovenstaande werkt, maar ik zou graag meerdere statements willen uitvoeren binnen één case.

Is het volgende mogelijk in SQL, dus meerdere toekenningen zoals regel 4 en 5 van onderstaande:

Java:
1
2
3
4
5
6
7
8
9
switch(a)
{
case 1:
     int b = 4;
     int c = 5;
case 2:
     int d = 6;
     int e = 7;
}

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23:37

Janoz

Moderator Devschuur®

!litemod

De denkfout die je maakt is dat je verwacht dat de CASE in sql hetzelfde werkt als een switch in een imperatieve/procedurele omgeving. Dat is echter niet het geval. SQL is een taal bedoelt voor het werken met en verwerken van verzamelingen. Het is niet een 'recept'-achtige taal zoals de imperatieve talen waarbij je een vast algoritme stap voor stap doorwerkt. De CASE is onderdeel van SQL en is dus een set gebaseerde operatie. Je kunt als resultaat dus alleen een 'waarde' terug geven en niet een operatie uitvoeren.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Kettrick
  • Registratie: Augustus 2000
  • Laatst online: 23:58

Kettrick

Rantmeister!

Je kan uiteraard wel meerdere cases gebruiken, maar dat heeft uiteraard ook zijn beperkingen en had je vast zelf ook al bedacht ? ;)

code:
1
2
3
4
5
6
7
8
9
10
11
SELECT a,
       CASE WHEN a=1 THEN 'one'
            WHEN a=2 THEN 'two'
            ELSE 'other'
       END as foo,

       CASE WHEN a=1 THEN 'one'
            WHEN a=2 THEN 'two'
            ELSE 'other'
       END as bar
FROM test;

Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
helaas pindakaas! Dan zal ik een andere implementatie van mijn probleem moeten implementeren. Ik had al eigenlijk de hoop al op gegeven dat het zou werken op die manier.

Ach ja! Bijna weekend in iedergeval! ;)

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles


Acties:
  • 0 Henk 'm!

  • leuk_he
  • Registratie: Augustus 2000
  • Laatst online: 15-07 15:35

leuk_he

1. Controleer de kabel!

je kunt otch gewoon if then else gebruiken?

http://www.postgresql.org...GSQL-STATEMENTS-RETURNING
36.7.2. Conditionals

IF statements let you execute commands based on certain conditions. PL/pgSQL has five forms of IF:

*

IF ... THEN
*

IF ... THEN ... ELSE
*

IF ... THEN ... ELSE IF
*

IF ... THEN ... ELSIF ... THEN ... ELSE
*

IF ... THEN ... ELSEIF ... THEN ... ELSE

Need more data. We want your specs. Ik ben ook maar dom. anders: forum, ff reggen, ff topic maken
En als je een oplossing hebt gevonden laat het ook ujb ff in dit topic horen.


Acties:
  • 0 Henk 'm!

  • Spiral
  • Registratie: December 2005
  • Niet online
Inderdaad is dat een mogelijkheid en die behoorde tot de andere oplossingen.

To say of what is that it is not, or of what is not that it is, is false, while to say of what is that it is, and of what is not that it is not, is true. | Aristoteles

Pagina: 1