Как передать значения в столбцы объекта из одной таблицы в другую? - PullRequest
3 голосов
/ 28 марта 2020

У меня есть моя главная таблица вот так

create table final(
    Province varchar2(50),
    Country varchar2(100),
    Latitude Number(10,0),
    Longitude Number(10,0),
    Cdate varchar2(20),
    Confirmed int,
    killed int,
    Recover int
) 

Затем я создал таблицу со вложенной таблицей вот так

create type virus_Statistic_t as object(
vDate varchar2(20),
infection int,
dead int,
recovered int
)
/

create type virus_Statistic_tlb as table of virus_Statistic_t
/

create type countries_t as object(
    Province_or_State varchar2(50),
    Country_or_Region varchar2(100),
    Lat Number(10,0),
    Longt Number(10,0),
    virus virus_Statistic_tlb
)
/

create table countries of countries_t (
       Lat not null,
       Longt not null
) nested table virus store as virus_ntb;

Теперь я пытаюсь пройти все значения столбцов от окончательные до страны таблицы.

Это я пробовал

INSERT INTO countries(Province_or_State, Country_or_Region, Lat, Longt, vDate, infection, dead, recovered)
SELECT  Province, Country, Latitude, Longitude, Cdate, Confirmed, killed, Recover
FROM final
/

выдает эту ошибку

ERROR at line 1:
ORA-00904: "RECOVERED": invalid identifier

Как передать все значения из таблицы final в стран ?

1 Ответ

1 голос
/ 28 марта 2020

Вам нужно использовать конструкторы типов. Правильный синтаксис таков:

INSERT INTO countries(Province_or_State, Country_or_Region, Lat, Longt, virus)
SELECT  Province, Country, Latitude, Longitude,
        virus_Statistic_tlb (virus_Statistic_t(Cdate, Confirmed, killed, Recover))
FROM final
/

Хотя обратите внимание, что это вставка только одной строки вируса на страну, вы это имели в виду? Чтобы вставить несколько строк вируса для каждой страны, сделайте следующее:

INSERT INTO countries(Province_or_State, Country_or_Region, Lat, Longt, virus)
SELECT  Province, Country, Latitude, Longitude,
        CAST(MULTISET(SELECT virus_Statistic_t(Cdate, Confirmed, killed, Recover)
                      FROM   final f2
                      WHERE  f2.Province = f1.Province
                      AND    ...etc.
                      ) AS virus_Statistic_tlb
             ) 
FROM final f1
GROUP BY Province, Country, Latitude, Longitude;

Мнение

Я никогда не смогу ответить на вопрос об использовании вложенных таблиц, не сказав, что правильный способ их использования - совсем нет ! В реальной базе данных у вас должна быть отдельная таблица базы данных для virus_statistics с внешним ключом для таблицы стран. Я понимаю, что вы, вероятно, делаете это в образовательных целях, но вы также должны знать, что никто не должен использовать вложенные таблицы в реальной жизни. Без сомнения, вы скоро поймете, почему, когда вы попытаетесь использовать эти данные: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...