2016-04-15 9 views
0

Ich habe Probleme beim Erstellen neuer verschachtelter Objekte in der Tabelle. Problem ist in der letzten Zeile. Der Rest geht gut. Fehler: "PACJENT: Ungültiger Bezeichner", wenn ich dort NULL gesetzt habe, ist es Arbeit, aber ich muss dort neues PACJENT setzen. Kannst du mir helfen ?Oracle ODB - geschachtelte Tabellen

PLACÓWKA

CREATE TYPE placowka_typ AS OBJECT (nazwa VARCHAR2(50), adres VARCHAR(250)); 
CREATE TABLE placowka_table OF placowka_typ; 
INSERT INTO placowka_table VALUES (placowka_typ ('xxx', 'xxx')); 

lekarz

CREATE TYPE lekarz_typ AS OBJECT (imie VARCHAR2(50), nazwisko VARCHAR(50),specjalizacja VARCHAR(150)); 
CREATE TABLE lekarz_table OF lekarz_typ; 
INSERT INTO lekarz_table VALUES (lekarz_typ ('xxx','xxx', 'xxx')); 

PACJENT

CREATE TYPE pacjent_typ AS OBJECT (imie VARCHAR2(30),nazwisko VARCHAR(50), adres VARCHAR(250), data_zlecenia DATE, data_urodzenia DATE, pesel NUMBER(11)); 
CREATE TABLE pacjent_table OF pacjent_typ; 
INSERT INTO pacjent_table VALUES (pacjent_typ ('xxx','xxx','xxx','2012-01-11','1997-11-24',xxx)); 

badanie

CREATE TYPE badanie_typ AS OBJECT (id_badania VARCHAR(10),nazwa_badania VARCHAR2(75), data_badania DATE, lekarz lekarz_typ, pacjent pacjent_typ, placowka REF placowka_typ); 
CREATE TABLE badanie_table OF badanie_typ; 
ALTER TABLE Badanie_table ADD SCOPE FOR(placowka) IS Placowka_table; 
INSERT INTO badanie_table VALUES (badanie_typ ('xxx','xxx', '2014-03-13',NULL,NULL,NULL)); 
UPDATE Badanie_table b SET b.PLACOWKA = (SELECT REF(p) FROM Placowka_table p WHERE p.NAZWA = 'xxx%'); 
SELECT b.Nazwa_badania, DEREF (b.placowka) FROM BADANIE_TABLE b; 
SELECT b.Nazwa_badania, b.placowka.nazwa FROM BADANIE_TABLE b; 
DELETE FROM LEKARZ_TABLE WHERE IMIE = 'xxx'; 
DELETE FROM PACJENT_TABLE WHERE IMIE = 'xxx'; 
DELETE FROM BADANIE_TABLE WHERE ID_BADANIA = 'xxxx'; 
INSERT INTO badanie_table VALUES (badanie_typ ('xxx','xxx', '2014-03-13',LEKARZ('xxx','xxx','xxx'), pacjent('xxx','xxx','xxx','2014-03-13','1997-11-24',xxx),NULL)); 

Fehler:

Error at Command Line : 1 Column : 141 
Error report - 
SQL Error: ORA-00904: "PACJENT": invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 
+1

Ist 'pacjent (...)' nur angeblich 'pacjent_typ (...)'? Und ähnlich sollte 'lekarz (...)' 'lekarz_typ (...)' sein? Oder sollten das wirklich REFs zu Einträgen in den Objekttabellen sein? –

+0

@Alex Poole - es ist Arbeit noch, ich kann es noch nicht, immer noch selbst lernen. – Giacomo

Antwort

1

Sie keinen Typen hat (oder andere Gegenstände) genannt pacjent, müssen Sie nur noch ein Feld mit diesem Namen in einem anderen Objekttyp.

Sie scheinen eine Instanz des Objekts pacjent_typ einfügen zu wollen. Sie haben das gleiche Problem mit Ihrem lekarz Referenz:

INSERT INTO badanie_table VALUES (
    badanie_typ ('xxx','xxx', date '2014-03-13', 
    lekarz_typ('xxx','xxx','xxx'), 
    pacjent_typ('xxx','xxx','xxx',date '2014-03-13',date '1997-11-24',999), 
    NULL 
) 
); 

Wie Sie Objekttabellen haben für diese Art könnte es mehr Sinn, für diese beiden Felder in badanie_typ auch sein REFs, eher als unabhängige Objekte machen, wie Sie haben für placowka:

CREATE TYPE badanie_typ AS OBJECT (id_badania VARCHAR(10), nazwa_badania VARCHAR2(75), data_badania DATE, 
    lekarz REF lekarz_typ, pacjent REF pacjent_typ, placowka REF placowka_typ); 
/
CREATE TABLE badanie_table OF badanie_typ; 
ALTER TABLE Badanie_table ADD SCOPE FOR(lekarz) IS lekarz_table; 
ALTER TABLE Badanie_table ADD SCOPE FOR(pacjent) IS pacjent_table; 
ALTER TABLE Badanie_table ADD SCOPE FOR(placowka) IS placowka_table; 

INSERT INTO badanie_table VALUES (badanie_typ ('xxx','xxx', date '2014-03-13', 
    (SELECT REF(l) FROM lekarz_table l WHERE l.imie = 'xxx'), 
    (SELECT REF(p) FROM pacjent_table p WHERE p.imie = 'xxx'), 
    (SELECT REF(p) FROM Placowka_table p WHERE p.nazwa = 'xxx') 
)); 
+0

Vielen Dank :) – Giacomo