sql >> データベース >  >> RDS >> Oracle

OracleREFは通過できません

    テーブルにエイリアスを指定してから、次の方法で列を参照する必要があります:

    <table_alias>.<ref_column>.<object_field>
    

    SQLフィドル

    Oracle11gR2スキーマのセットアップ

    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
    

    結果

    | IDEMPRUNT | EMPRUNTEUR_REF.IDEMPRUNTEUR | EXEMPLAIRE_REF.IDEXEMPLAIRE | EXEMPLAIRE_REF.NUMERORAYON | EXEMPLAIRE_REF.DOCUMENT.IDDOCUMENT |
    |-----------|-----------------------------|-----------------------------|----------------------------|------------------------------------|
    |         1 |                           1 |                           2 |                         42 |                                  1 |
    |         2 |                           2 |                           1 |                         13 |                                  2 |
    



    1. WorkbenchMySQLクライアントを使用してデータベースに接続する方法

    2. 行は明確に数えられません

    3. デフォルトで例外をスローするようにPDOを設定します

    4. SQLiteとは何ですか?