[ORA-SQL]Function of Procedure in select gebruiken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Senaxx
  • Registratie: December 2010
  • Laatst online: 11-09 13:27
Bij een klant bezig ik bezig met een view te maken op een tabel. Nu is dit op zich niet zo schokkend, maar het was de bedoeling om een bepaalde waarde uit een CLOB veld te halen.

Dit heb ik opgelost door:
code:
1
2
3
4
5
select   substr (gegevens, instr (gegevens, 'INSUFFICIENTIE=',1,1) + 15, 
instr (gegevens, chr(27), 
instr (gegevens, 'INSUFFICIENTIE=',1,1),1) - 
instr (gegevens, 'INSUFFICIENTIE=',1,1) - 15) insufficientie
from djps_beschikking;


Nu werkt deze als losse code perfect, maar nu wil ik in mijn huidige select meenemen. Nu heb ik in de view 4 tabellen die ik aan elkaar UNION en met een ranking de juiste waarde bepaal. Om de code schoon te houden zou het mooi zijn om hier een function/procedure van te maken en ik deze kan aanroepen. Een voorbeeld van de select waar hij in moet is:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT 
all_bes.*, 
RANK() OVER (PARTITION BY verzekerde_id, zorgjaar ORDER BY voorkeur, datum_verwerkt DESC, beschikking_id DESC) AS rank_level
FROM
(
SELECT hjps_beschikking_id beschikking_id, landcode, verzekerde_id, status_verwerking, bijdragen_nom, 
bijdragen_zvw_laag, bijdragen_zvw_hoog, bijdragen_awbz, inhoudingen_nom, inhoudingen_zvw, 
inhoudingen_awbz, wettelijke_rente, totaal_hcf, woonlandfactor, beschikkingsbedrag, zorgjaar,
NVL(datum_verwerkt, TO_DATE('01-01-1900', 'dd-mm-yyyy')) 
datum_verwerkt, 'HJPS' groep, 1 voorkeur
FROM hjps_beschikking 
WHERE status_verwerking = 'A'

UNION ALL

*tweede table*


Hier in de 2e select zou ik dus graag de function willen aanroepen om uit de tabel "gegevens" van de tabel X de waarde van INSUFFICIENTIE te bepalen. Die code moet dus in uiteindelijk in 4 selects komen van 4 verschillende tabellen. Dus de FROM is variabel.

Wie o wie kan deze beginnende sql'er een beetje helpen?

Acties:
  • 0 Henk 'm!

  • CyBeRSPiN
  • Registratie: Februari 2001
  • Laatst online: 18:48

CyBeRSPiN

sinds 2001

Wat heb je al geprobeerd? Heb je al een functie aangemaakt? Die kun je gewoon in een query gebruiken, gegevens als input en die substr als output.

Acties:
  • 0 Henk 'm!

  • The Eagle
  • Registratie: Januari 2002
  • Nu online

The Eagle

I wear my sunglasses at night

Waarom zelf het wiel uitvinden als Oracle het al voor je heeft gedaan? Zoek maar eens naar de functie DBMS_LOB ;)

Leesvoer: http://www.orafaq.com/node/895 :)

Edit: overigens is je code fout; je kunt een ORDER BY pas gebruiken _nadat_ je alle unions hebt gehad. Group by daarentegen kan (en bij zaken als AVG en SUM: moet) wel in je SELECT :)

[ Voor 36% gewijzigd door The Eagle op 23-09-2011 22:08 ]

Al is het nieuws nog zo slecht, het wordt leuker als je het op zijn Brabants zegt :)


Acties:
  • 0 Henk 'm!

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Je hebt al een inline view in je from clausule. Als je daar nu alles uit selecteert en je functie toepast dan kun je dit weer inline aan je partition query 'voeren'.
dus:
SELECT
all_bes.*,
RANK() OVER (PARTITION BY verzekerde_id, zorgjaar ORDER BY voorkeur, datum_verwerkt DESC, beschikking_id DESC) AS rank_level
FROM
( SELECT t_bes.*, substr (gegevens, instr .....etc
FROM (
SELECT hjps_beschikking...

The Eagle: die order by hoort by de partition clausule en staat op zijn plek

Who is John Galt?