Toon posts:

[Oracle7] CASE Expression werkt niet

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hallo All,

Heb de search gebruikt om een oplossing te vinden voor mijn probleem. Helaas geen resultaat.

Het volgende is de bedoeling. Ik heb een aantal Oracle7 tabellen die ik met elkaar wil linken. Dit doe ik door alle tabellen in te dikken op een half uur. Dus ik heb een tijd veld (in werkelijkheid een string veld) die ik middels een case when then else expressie wil indikken.
Zoiets als dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
dest, term_date,
(case
when (length(term_time) = '1') then '0000'
when (length(term_time) = '2') then '0000'
when (length(term_time) = '3') then '0000'
when (length(term_time) = '4') and substr(term_time,-4,4) <= 3000 then '0000'
when (length(term_time) = '4') and substr(term_time,-4,4) >= 3000 then '3000'
when (length(term_time) = '5') and substr(term_time,-4,4) <= 3000 then concat(substr(term_time,1,1),'0000')
when (length(term_time) = '5') and substr(term_time,-4,4) >= 3000 then concat(substr(term_time,1,1),'3000')
when (length(term_time) = '6') and substr(term_time,-4,4) <= 3000 then concat(substr(term_time,1,2),'0000')
when (length(term_time) = '6') and substr(term_time,-4,4) >= 3000 then concat(substr(term_time,1,2),'3000')
else '0000' end)
as termtime 
FROM calldetail
GROUP BY dest, term_date, term_time


Dit werkt op Oracle 10 uitstekend.
Maar op Oracle7 niet!!!
Ik heb ergens gelezen dat een Case expressie wel mogelijk is op Oracle7, maar ik krijg het op geen een manier aan de praat.

Hebben jullie een tip voor mij?
Of wellicht een andere manier om dit te doen?

Graag hoor ik van jullie!

Groeten,

Wim

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Case werkt vanaf Oracle 8i in views en SQL, in PL/SQL vanaf 9i meen ik.
Oracle 7 ondersteunt case zover ik weet helemaal niet.

Om dit op te lossen kun je bijvoorbeeld een PL/SQL functie gebruiken.
Als het zonder PL/SQL moet dan kun je waarschijnlijk met wat creatief decode gebruik ook nog wel een oplossing maken (in de vorm van: decode(sign(var-grens), -1, 'kleiner', 'groter') )

[ Voor 55% gewijzigd door justmental op 14-11-2005 13:17 ]

Who is John Galt?


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Met een beetje creatief unionnen moet dat kunnen toch?

code:
1
2
3
4
5
6
7
8
9
   SELECT 
   dest, term_date, '0000' as termtime from calldetail
   where length(term_time) in ('1','2','3')
UNION
   SELECT 
   dest, term_date, '0001' as termtime from calldetail
   where length(term_time) in ('4')
UNION
   ...

Siditamentis astuentis pactum.


Verwijderd

Topicstarter
Varienaja schreef op maandag 14 november 2005 @ 13:26:
Met een beetje creatief unionnen moet dat kunnen toch?

code:
1
2
3
4
5
6
7
8
9
   SELECT 
   dest, term_date, '0000' as termtime from calldetail
   where length(term_time) in ('1','2','3')
UNION
   SELECT 
   dest, term_date, '0001' as termtime from calldetail
   where length(term_time) in ('4')
UNION
   ...
Varienaja,

Dit ga ik eens proberen, bedankt. ik laat het even weten.

Verwijderd

Topicstarter
Justmental,

Heb die van jou eens geprobeerd en volgens mij is dat de oplossing!
de decode om precies te zijn.

Morgen ga ik verder.

Groet
justmental schreef op maandag 14 november 2005 @ 12:59:
Case werkt vanaf Oracle 8i in views en SQL, in PL/SQL vanaf 9i meen ik.
Oracle 7 ondersteunt case zover ik weet helemaal niet.

Om dit op te lossen kun je bijvoorbeeld een PL/SQL functie gebruiken.
Als het zonder PL/SQL moet dan kun je waarschijnlijk met wat creatief decode gebruik ook nog wel een oplossing maken (in de vorm van: decode(sign(var-grens), -1, 'kleiner', 'groter') )

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 21:37

JaQ

Case gaat het zeker niet doen in 7.3, maar je kan wel e.e.a. doen met decode (als je het in sql wilt houden tenminste).

code:
1
2
3
4
decode( length(term_item),
             1, '0000',
             2, '0000'
etc)


Wel even nesten voor de dubbele voorwaarden.

*spuit 11 blijkbaar.. *

[ Voor 10% gewijzigd door JaQ op 14-11-2005 22:56 ]

Egoist: A person of low taste, more interested in themselves than in me


Verwijderd

Topicstarter
Heren (of dames),

Bedankt voor de tips!

Met decode ben ik er uit gekomen.

Groet

  • djiedjee
  • Registratie: December 2003
  • Laatst online: 21:50
He, de database van een aspect-centrale, toch?
Pagina: 1