Oracle ODB - 嵌套表
Oracle ODB - nested tables
我在 table 中创建新的嵌套对象时遇到问题。问题在最后一行。其余一切顺利。错误:"PACJENT: Invalid identifier",当我将 NULL 放在那里时它可以工作,但我需要将新的 PACJENT 放在那里。你能帮帮我吗?
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'));
莱卡兹
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));
巴达妮
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));
错误:
Error at Command Line : 1 Column : 141
Error report -
SQL Error: ORA-00904: "PACJENT": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
您没有名为 pacjent
的类型(或任何其他对象),您只是在另一个对象类型中有一个具有该名称的字段。
您似乎想要插入 pacjent_typ
对象的一个实例。您的 lekarz
参考文献也有同样的问题:
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
)
);
因为您有这些类型的对象表,所以 badanie_typ
中的这两个字段也作为 REF 可能更有意义,而不是独立的对象,就像您为 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')
));
我在 table 中创建新的嵌套对象时遇到问题。问题在最后一行。其余一切顺利。错误:"PACJENT: Invalid identifier",当我将 NULL 放在那里时它可以工作,但我需要将新的 PACJENT 放在那里。你能帮帮我吗?
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'));
莱卡兹
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));
巴达妮
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));
错误:
Error at Command Line : 1 Column : 141
Error report -
SQL Error: ORA-00904: "PACJENT": invalid identifier
00904. 00000 - "%s: invalid identifier"
*Cause:
*Action:
您没有名为 pacjent
的类型(或任何其他对象),您只是在另一个对象类型中有一个具有该名称的字段。
您似乎想要插入 pacjent_typ
对象的一个实例。您的 lekarz
参考文献也有同样的问题:
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
)
);
因为您有这些类型的对象表,所以 badanie_typ
中的这两个字段也作为 REF 可能更有意义,而不是独立的对象,就像您为 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')
));