[ACCESS --> ORACLE] Conversie SQL statement

Pagina: 1
Acties:
  • 107 views sinds 30-01-2008
  • Reageer

  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
Ik poste gister de noobvraag hoe ik van een access update query een ORACLE update query kon maken...
code:
1
2
3
4
5
6
7
UPDATE (Tabel1 AS T1 INNER JOIN (Tabel4 AS T4 INNER JOIN Tabel2 AS T2 
ON (T4.CLUSTERTYPE = T2.CLUSTERTYPE) AND (T4.CLUSTERCODE = T2.CLUSTERCODE))
ON T1.TRAJECTNR = T4.TRAJECTNR) 
INNER JOIN Tabel3 AS T3 ON T1.VOLGNR = T3.VOLGNR SET T3.DECL_CODE = [tb_clusters]![DECL_CODE], 
T3.CLUSTER_OMS = [tb_clusters]![cluster_omschr], 
T3.SEGMENT = Left([tb_clusters]![hoger_CLUSTERCODE],1)
WHERE (((T4.DBC_CLUSTERTYPE)="DEF"));

Dit werkt in access redelijk tot goed..

Het volgende heb ik in ORACLE geprobeerd :

1. View aanmaken omdat joins niet werken in een update in ORACLE:
2. de update uitvoeren op basis van de join..

code:
1
2
3
UPDATE TB_TST
SET TB_TST.CLUSTER_OMS =(select CLUSTER_OMS from V_TEST
WHERE TB_TST.VERR_VOLGNR = V_TEST.VERR_VOLGNR);


Dit resulteerde in een stuk of 15 miljard logical reads, en uiteindelijk niet in een resultaat omdat ik de sessie heb gekilled...
Het opvragen van de view in een query in access lukt prima en ook is access met de hele update ongeveer 2 uur bezig maar dan heb je wel wat.. het gaat om een stuk of 7 miljoen records waarvan het cluster moet worden toegevoegd...
Ik heb ook geprobeerd met een materialized view de update uit te voeren maar dat lijkt ook niet te lukken.
Heeft iemand een idee?

Sign of my Time


  • The Eagle
  • Registratie: Januari 2002
  • Laatst online: 14:37

The Eagle

I wear my sunglasses at night

probeer eens iets als:
code:
1
Update TABEL as (select * from jointabellen)

ZOu me niks bervazen als ie dat wel pakt :)

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


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Als je naar het explain plan van je statement kijkt zul je waarschijnlijk zien dat je een niet mergebare view hebt en dus de hele view opgebouwd wordt per rij die je gaat updaten.
Waarschijnlijk werkt het beter als je de view uitschrijft in je subquery.

Als het om een eenmalige actie gaat dan is het makkelijkst waarschijnlijk een tabel te maken met de gegevens uit de view en daar een index op verr_volgnr op te leggen.
Deze kun je dan gebruiken in plaats van de view.

Who is John Galt?


  • DND_Roche
  • Registratie: Juli 2006
  • Laatst online: 02-01-2024
Misschien is het makkelijker het hele stukje in een pl/sql procedure te gieten.
Cursortje voor de te-updaten-tabel

En dan in een for-in loopje alleen die records muteren die je cursor teruggeeft?

  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
justmental schreef op woensdag 09 augustus 2006 @ 13:02:
Als je naar het explain plan van je statement kijkt zul je waarschijnlijk zien dat je een niet mergebare view hebt en dus de hele view opgebouwd wordt per rij die je gaat updaten.
Waarschijnlijk werkt het beter als je de view uitschrijft in je subquery.

Als het om een eenmalige actie gaat dan is het makkelijkst waarschijnlijk een tabel te maken met de gegevens uit de view en daar een index op verr_volgnr op te leggen.
Deze kun je dan gebruiken in plaats van de view.
Ik dacht dat ik dat deed door de materialized view te maken. Ik zal eens kijken of het inderdaad wel werkt wanneer ik een tabel maak in plaats van een view.

Als hij inderdaad voor alle 7 miljoen records 7 miljoen records moet doornemen kan dat wel even duren...

Sign of my Time


  • Wilfred
  • Registratie: Januari 2000
  • Laatst online: 22-08-2022
7790789 rijen zijn bijgewerkt.

_/-\o_ Hartelijk dank.. _/-\o_ Met een vaste tabel en daar een index op het id is een stuk sneller

Sign of my Time

Pagina: 1