Я создал эти два объекта:
CREATE OR REPLACE TYPE tp_endereco AS OBJECT (
ID INTEGER,
DESCRICAO VARCHAR2(100),
CEP VARCHAR2(30) );
CREATE OR REPLACE TYPE tp_hospedagem AS OBJECT (
ID INTEGER,
NOME VARCHAR2(200),
ENDERECO_FK_ID tp_endereco,
VALOR NUMBER(9,2),
TIPO_ACOMODACAO VARCHAR2(20) );
А потом я создал таблицу объектов:
CREATE TABLE tb_endereco OF tp_endereco (PRIMARY KEY (id));
Но я не знаю, как создать таблицу типа TP_HOSPEDAGEM. Как я могу реализовать ограничение FK ENDERECO_FK_ID?
Если я попробую это сделать, у меня будет ошибка:
CREATE TABLE tb_hospedagem OF tp_hospedagem (PRIMARY KEY (id) FOREIGN KEY (endereco_fk_id));
Это происходит потому, что есть разные типы, но я все равно проиграл.
Может кто-нибудь мне помочь?
Спасибо вам, ребята!
Я не уверен, почему вы так поступаете, возможно, вы работаете над формами orcale, но попробуйте следующее (обратите внимание, что вам нужно изменить имя таблицы):
CREATE TABLE tp_endereco_obj OF tp_endereco (ID PRIMARY KEY)
OBJECT IDENTIFIER IS PRIMARY KEY;
/
CREATE TABLE table_hospedagem OF tp_hospedagem (PRIMARY KEY (id) ,
FOREIGN KEY (id) REFERENCES tp_endereco_obj (id));
/
Не сработало: 00942. 00000 - «таблица или представление не существует»
Привет Чувак. Это сработало, спасибо. Но почему мы не используем endereco_fk_id как FK (FOREIGN KEY (endereco_fk_id))?
@LucasBacciotti beacaus endereco_fk_id - это объект, а не столбец, вы должны ссылаться на столбец со столбцом. Я действительно не понимаю, что вы делаете, но исправляю ошибку, которую вы имели.
спасибо человек, это решило мою проблему. Это просто домашнее задание из моей степени магистра. Об этом просил мой профессор! Спасибо еще раз!
Кстати, зачем вам эти типы? Почему бы просто не создать обычные таблицы и ссылаться на их идентификаторы?