【问题标题】:Missing Expression for insert statement in PL/SQL ODBM?PL/SQL ODBM 中的插入语句缺少表达式?
【发布时间】:2019-10-11 13:40:00
【问题描述】:

我正在尝试在 Oracle SQL Developer 的 PL/SQL 中填充对象关系数据库,并不断收到错误 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)
/

【问题讨论】:

标签: sql oracle plsql sql-insert


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-19
    • 2013-02-15
    • 2017-12-20
    • 2021-02-24
    相关资源
    最近更新 更多