Je třeba dát tabulce alias a pak odkazovat na sloupec pomocí:
<table_alias>.<ref_column>.<object_field>
Nastavení schématu Oracle 11g R2 :
create or replace type t_document as object
( IdDocument Number(10) )
/
create table document of t_document(
primary key(IdDocument))
/
INSERT INTO document
SELECT t_document( 1 ) FROM DUAL
UNION ALL SELECT t_document( 2 ) FROM DUAL
/
create or replace type t_emprunteur as object
( IdEmprunteur Number(10) )
/
create table emprunteur of t_emprunteur(
primary key(IdEmprunteur))
/
INSERT INTO emprunteur
SELECT t_emprunteur( 1 ) FROM DUAL
UNION ALL SELECT t_emprunteur( 2 ) FROM DUAL
/
create or replace type t_exemplaire as object
( IdExemplaire Number(10),
NumeroRayon Number(5),
Document ref t_document )
/
create table exemplaire of t_exemplaire(
primary key(IdExemplaire),
constraint Document_c CHECK ( Document is not null))
/
INSERT INTO exemplaire
SELECT t_exemplaire( 1, 13, (SELECT REF(d) FROM document d WHERE d.IdDocument = 2) ) FROM DUAL
UNION ALL SELECT t_exemplaire( 2, 42, (SELECT REF(d) FROM document d WHERE d.IdDocument = 1) ) FROM DUAL
/
create or replace type t_emprunt as object
( IdEmprunt Number(10),
DateD DATE,
DateF DATE,
Emprunteur_ref ref t_emprunteur,
Exemplaire_ref ref t_exemplaire )
/
create table emprunt of t_emprunt(
primary key(IdEmprunt),
Emprunteur_ref scope is emprunteur,
Exemplaire_ref scope is exemplaire,
DateD default sysdate)
/
INSERT INTO emprunt
SELECT t_emprunt( 1,
SYSDATE,
SYSDATE - 1,
(SELECT REF(e) FROM emprunteur e WHERE e.IdEmprunteur = 1),
(SELECT REF(e) FROM exemplaire e WHERE e.IdExemplaire = 2)
) FROM DUAL
UNION ALL SELECT t_emprunt( 2,
TO_DATE( '2000/01/01', 'YYYY/MM/DD' ),
TO_DATE( '2001/12/31', 'YYYY/MM/DD' ),
(SELECT REF(e) FROM emprunteur e WHERE e.IdEmprunteur = 2),
(SELECT REF(e) FROM exemplaire e WHERE e.IdExemplaire = 1)
) FROM DUAL
/
CREATE INDEX emprunt_emprunteur_ref_idx ON emprunt (Emprunteur_ref)
/
Dotaz 1 :
SELECT e.IdEmprunt,
e.Emprunteur_ref.IdEmprunteur,
e.Exemplaire_ref.IdExemplaire,
e.Exemplaire_ref.NumeroRayon,
e.Exemplaire_ref.Document.IdDocument
FROM emprunt e
Výsledky :
| IDEMPRUNT | EMPRUNTEUR_REF.IDEMPRUNTEUR | EXEMPLAIRE_REF.IDEXEMPLAIRE | EXEMPLAIRE_REF.NUMERORAYON | EXEMPLAIRE_REF.DOCUMENT.IDDOCUMENT |
|-----------|-----------------------------|-----------------------------|----------------------------|------------------------------------|
| 1 | 1 | 2 | 42 | 1 |
| 2 | 2 | 1 | 13 | 2 |