Oracle REF无法通过 [英] Oracle REF can't go through
本文介绍了Oracle REF无法通过的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我的桌子:
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))
/
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)
/
我想要访问这样的属性类型:
I would like access to my attribute type like that :
Exemplaire_ref.IdExemplaire
但是我遇到很多错误.
如何使用REF访问属性?
How can I use REF to access attributes ?
DEREF不起作用,我使用oracle XE 11
DEREF do not work , I use oracle XE 11
谢谢
推荐答案
您需要为表赋予别名,然后通过以下方式引用该列:
You need to give the table an alias and then refer to the column by:
<table_alias>.<ref_column>.<object_field>
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)
/
查询1 :
SELECT e.IdEmprunt,
e.Emprunteur_ref.IdEmprunteur,
e.Exemplaire_ref.IdExemplaire,
e.Exemplaire_ref.NumeroRayon,
e.Exemplaire_ref.Document.IdDocument
FROM emprunt e
结果 :
Results:
| IDEMPRUNT | EMPRUNTEUR_REF.IDEMPRUNTEUR | EXEMPLAIRE_REF.IDEXEMPLAIRE | EXEMPLAIRE_REF.NUMERORAYON | EXEMPLAIRE_REF.DOCUMENT.IDDOCUMENT |
|-----------|-----------------------------|-----------------------------|----------------------------|------------------------------------|
| 1 | 1 | 2 | 42 | 1 |
| 2 | 2 | 1 | 13 | 2 |
这篇关于Oracle REF无法通过的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文