Как ссылаться на объект с внешним ключом в Oracle PL / SQL?

Я создал эти два объекта:

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));

Это происходит потому, что есть разные типы, но я все равно проиграл.

Может кто-нибудь мне помочь?

Спасибо вам, ребята!

Кстати, зачем вам эти типы? Почему бы просто не создать обычные таблицы и ссылаться на их идентификаторы?

Kaushik Nayak 31.10.2018 14:01
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
0
1
277
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я не уверен, почему вы так поступаете, возможно, вы работаете над формами 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 - «таблица или представление не существует»

Lucas Bacciotti 31.10.2018 15:36

Привет Чувак. Это сработало, спасибо. Но почему мы не используем endereco_fk_id как FK (FOREIGN KEY (endereco_fk_id))?

Lucas Bacciotti 31.10.2018 15:48

@LucasBacciotti beacaus endereco_fk_id - это объект, а не столбец, вы должны ссылаться на столбец со столбцом. Я действительно не понимаю, что вы делаете, но исправляю ошибку, которую вы имели.

Moudiz 31.10.2018 15:55

спасибо человек, это решило мою проблему. Это просто домашнее задание из моей степени магистра. Об этом просил мой профессор! Спасибо еще раз!

Lucas Bacciotti 31.10.2018 16:00

Другие вопросы по теме