Отсутствует выражение для оператора вставки в PL / SQL ODBM? - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь заполнить объектно-реляционную базу данных в PL / SQL в Oracle SQL Developer и продолжаю получать сообщение об ошибке ORA-00936: Missing Expression.

Я пробовал разные исправления, но онивсе приводят к различным ошибкам. База данных была предоставлена, и оператор INSERT полностью мой.

Результат должен быть правильно вставлен в таблицу, но это не так, и я не знаю, как продвигаться.

-- create OMDB --
-----------------
-- drop tables --
drop table albums 
/ 
drop type disk_type 
/ 
drop type mp3_type 
/
drop type album_type 
/
drop type artist_array_type 
/
drop type artist_type 
/
drop type review_table_type 
/
drop type review_type 
/
-- create types --
create or replace type artist_type as object 
(artistName     varchar(50), 
 artistRole     varchar(25)) 
/ 
create type artist_array_type  
as varray(5) of artist_type 
/ 
create or replace type review_type as object 
(reviewerName   varchar(25), 
 reviewDate     date,
 reviewText     varchar(250), 
 reviewScore    number) 
/
create or replace type review_table_type as table of review_type 
/
create or replace type album_type as object 
(albumTitle         varchar(50),
 albumPlaytime      number(3), -- minutes
 albumReleaseDate   date, 
 albumGenre         varchar(15),
 albumPrice         number(9,2),
 albumTracks        number(2),
 albumArtists       artist_array_type,
 albumReviews       review_table_type,
member function discountPrice return number,
member function containsText (pString1 varchar2, pString2 varchar2) return integer)
not instantiable not final  
/
create or replace type disk_type under album_type 
( mediaType         varchar(10),
 diskNum            number(2), -- number of disks
 diskUsedPrice      number(9,2),
 diskDeliveryCost   number(9,2), 
overriding member function discountPrice return number) 
/
create or replace type mp3_type under album_type
(downloadSize   number, -- size in MB
 overriding member function discountPrice return number) 
/
-- create tables --
create table albums of album_type 
object id system generated
nested table albumReviews store as store_reviews  
/ 

Вот мое заявление о вставке

insert into albums values (disk_type('The Essential Bob Dylan', 99, '8-Jul-2016', 'Pop', 37.00, 32, 
artist_array_list(artist_type('Bob Dylan', 'Vocals'), artist_type('Bob Dylan', 'Composer')), 
albumReviews(review_type('Shawn', '24-Jul-2018', 'Wife loved it!', 5), review_type('Reuben', '2-Aug-2019', 'Great compilation of some of his most known songs', 5)), 
'Vinyl', 2, '', 11.00)
/

1 Ответ

3 голосов
/ 11 октября 2019

В вашем операторе INSERT есть несколько ошибок:

  1. В конце вы пропускаете закрывающий ) (это то, в чем редакторы, выделяющие соответствующие скобки, могут сильно помочь)
  2. у вас нет типа artist_array_list у вас есть только artist_array_type
  3. у вас нет типа albumReviews, который должен быть review_table_type

Сложив все это вместе, следующееработы:

insert into albums 
values (
  disk_type('The Essential Bob Dylan', 99, '8-Jul-2016', 'Pop', 37.00, 32, 
             artist_array_type(artist_type('Bob Dylan', 'Vocals'), 
                               artist_type('Bob Dylan', 'Composer')), 
             review_table_type(review_type('Shawn', '24-Jul-2018', 'Wife loved it!', 5), 
                               review_type('Reuben', '2-Aug-2019', 'Great compilation of some of his most known songs', 5)), 
             'Vinyl', 2, '', 11.00)
);
...