[Oracle] Hoe werken views (kolomnamen) in Oracle?

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

  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 21-08 17:47
Normaal werk ik met MS SQL Server, maar nu wil ik via een tool tabellen vanuit Oracle inlezen naar Server, zodat ik dan uiteindelijk alle tabellen in één database heb staan.

Nu ging dat voor alle tabellen goed, behalve voor ééntje natuurlijk... |:(

Deze tabel bleek een view te zijn, dus daarnaar gezocht.
In deze view zit 1 kolom die het probleem opleverd, waardoor ik m niet over kan zetten. De naam van deze kolom is EXTSYSTEM.

Als ik in Oracle de beschrijving van de view bekijk, kom ik alleen nergens "EXTSYSTEM" tegen.
Alle data in deze view wordt (met berekening en voorwaarden) uit één tabel gehaald. Ook in deze tabel is geen kolom met de naam "EXTSYSTEM".

Ik zou toch verwachten dat de (originele) kolom EXTSYSTEM in de brontabel zit,
of dat in de view voor een andere kolom wordt vermeld: "select <kolom> as EXTSYSTEM"
maar dat is dus niet het geval...

is er iemand die mij kan uitleggen hoe dit werkt in Oracle DB?

Leeg - Sinds 20180907


  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:50

JaQ

Je hoef in Oracle-sql geen <<kolom>> as <<alias>> te gebruiken, maar je kan gewoon <<kolomnaam>> <<alias>> roepen. Maar dat is denk ik niet je probleem. Hoe heb je de beschrijving van de view opgehaald? Heb je zitten querien in (uit mijn hoofd) user_sourcem of heb je een of ander tooltje gebruikt?

En kan je de source van die view eens posten?

(damn... ik heb al zo lang geen Oracle Database meer aangeraakt dat ik over de datadictionary tabellen begin te twijfelen...)

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


  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 21-08 17:47
Ben dus niet echt thuis in Oracle, voor alles moet ik een beetje zoeken.
maar uiteindelijk heb ik de view beschrijving bekeken in de Oracle Enterprice Manager... :)

(user_sourcem) zegt me dus ook niets, want ik ken dus geen Oracle systeemtabellen...
datgene wat ik kreeg om viewproperties te zien was eigenlijk ongeveer hetzelfde als wanneer je in SQL Server Enterprice Manager 'properties' van een view klikt.

source posten kan, maar dat komt later, want ander (nu bezet :( ) machien...

Leeg - Sinds 20180907


  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:50

JaQ

sorry, user_source moet dat dus zijn (dus zonder m tikfout).

Ik denk dat je toch echt even de source van die view moet posten. Het zal namelijk toch echt een alias op een kolom moeten zijn.

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


  • GormSuil
  • Registratie: Maart 2003
  • Laatst online: 28-10-2021
In user_source vind je volgens mij alleen maar stored procedures volgens mij moet je voor views zoeken in user_views

select * from user_views where view_name = <...> bijvoorbeeld

Pentium IV 2.8E/ ASUS P4P800 / 2x256MB PC3200 / Saphire RADEON 9800/ Maxtor 80 Gb 7200 rpm/LIAN-Li PC60 & ToPower 350W


  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 21-08 17:47
maar met de properties van de view heb ik toch in principe de gebruikte (dus benoemde) kolommen al??

ik vraag me alleen af waarom ik een foutmelding krijg op een tabel die er in zou moeten zitten, maar die ik na doorzoeken totaal niet tegenkom in de beschrijvingen (of bron) van de view...

Leeg - Sinds 20180907


  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:50

JaQ

als je de definitie van de view hebt, dan kan je die toch zo aanmaken in Sql*Sever? De definite (dus het fysieke sql statement waarmee de view wordt gemaakt) kan je dus vertellen welke kolom in de view tegen welke kolom in een of meer tabellen "mapt".

Of ondersteund sql*server geen views of zo? (of weet niet wat een view is?)

toevoeging: alleen de kolomnamen heb je dus niet genoeg aan. Je zoekt iets dat lijkt op:
create or replace view <<naam>> as select ... from .. where ... ;

offtopic:
ik moet altijd twijfelen of gecompileerde objecten (zoals views dus) hun source niet in all_source hebben staan. Dacht altijd dat de vuistregel was dat alleen trigger source buiten all_source gehouden werd (en dat all_views dus net zoals all_tables iets over de view verteld, maar niet het creatie statement. Helaas heb ik nu dus geen Oracle db bij de hand om mijn stelling te kunnen checken.

[ Voor 11% gewijzigd door JaQ op 29-08-2003 15:01 . Reden: toevoeging ]

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


  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 21-08 17:47
DrFrankenstoner schreef op 29 augustus 2003 @ 15:00:
als je de definitie van de view hebt, dan kan je die toch zo aanmaken in Sql*Sever? De definite (dus het fysieke sql statement waarmee de view wordt gemaakt) kan je dus vertellen welke kolom in de view tegen welke kolom in een of meer tabellen "mapt".

Of ondersteund sql*server geen views of zo? (of weet niet wat een view is?)

toevoeging: alleen de kolomnamen heb je dus niet genoeg aan. Je zoekt iets dat lijkt op:
create or replace view <<naam>> as select ... from .. where ... ;
Ik gebruik dus een tool om de tabellen van Oracle over te zetten naar SQL Server.

dit gaat om 2 redenen niet ineens (dus query ingeven in SQLServer):
- De brontabellen voor de OracleView komen niet in SQL. Alleen de hoognodige moeten daar komen.
- De tabellen die overgezet worden MOETEN via mijn tool lopen. Deze zorgt er namelijk voor dat de properties van elk veld direct goed worden geschreven, geen instellingen achteraf dus, en het zorgt dat er elke nacht een geschedulede update kan plaatsvinden.

de definities (het: create or replace view <<naam>> as select ... from .. where ... ;)
heb ik dus. De bron van de view ook.
Alleen als output van de view is er dus een kolom die ik niet in de definitie en niet in de bron tegenkom... Waar komt deze dan vandaan???

Leeg - Sinds 20180907


  • Swa-baldie
  • Registratie: Juni 2002
  • Laatst online: 19-06-2023
Chillz schreef op 29 August 2003 @ 16:30:
[...]


de definities (het: create or replace view <<naam>> as select ... from .. where ... ;)
heb ik dus. De bron van de view ook.
... Waar komt deze dan vandaan???
Als je de definitie hebt dan moet de kolomnaam erin voorkomen, hetzij als de "echte" naam of de alias zoals al eerder vermeld. Wat je zou kunnen doen is de viewdefinitie aanpassen en deze opnieuw genereren in de db (let op is wel een replace). Je zou de view even als naam view_tmp kunnen geven zodat je deze kunt gebruiken voor je import.

Suc6

Verwijderd

de kolomnamen staan in all_tab_columns

als je de view aanmaakt als :

code:
1
2
3
4
5
create view testje
 (kolom1)
as
  select dummy
  from dual


dan staat er bij de source van de view (bijv. user_views) nergens "kolom1"
deze kolomnaam staat wel in all_tab_columns

  • Swa-baldie
  • Registratie: Juni 2002
  • Laatst online: 19-06-2023
Verwijderd schreef op 02 September 2003 @ 13:05:
de kolomnamen staan in all_tab_columns
...
De view kan ook als volgt gedefinieerd zijn:
code:
1
2
3
4
create view testje
as
  select dummy kolom1
  from dual


Dus de naam zou in theorie op verschillende 2 plaatsen kunnen staan.

code:
1
2
3
4
5
create view testje
(kolom2)
as
  select dummy kolom1
  from dual


In dit bovenstaande geval krijgt de kolom de naam kolom2

En ik zou persoonlijk eerst in user_tab_columns zoeken voordat je all_tab_columns gebruikt (heb je een kleinere subset)

  • Chillz
  • Registratie: Augustus 2001
  • Laatst online: 21-08 17:47
Swa-baldie schreef op 03 september 2003 @ 02:00:
code:
1
2
3
4
5
create view testje
(kolom2)
as
  select dummy kolom1
  from dual


In dit bovenstaande geval krijgt de kolom de naam kolom2
Yep, bedankt,

ik ben er intussen achter dat dit het geval is in de view die ik heb.
Ik heb vanmorgen de code hiervoor ontvangen van de ontwikkelaars.

Nu moet ik alleen zelf kijken inhoeverre ik iets met deze code kan (in Oracle)
zodat ik ze uiteindelijk wel kan laden naar SQL Server...

Leeg - Sinds 20180907

Pagina: 1