2016-11-24 73 views
-1

我最近创建了一个名为Movie_Stars的表。它包含6列:Movie_Number number unique,Movie_Title varchar2(30)unique,Year_Released date not null,First_Name varchar2(15),Last_Name varchar2(15)和Movie_Category varchar2(15)。我需要插入下面的值到表:插入多行时的虚拟结果

insert all 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category) 
      values (1, 'New York Stories', 'January 1 1984', Nick, Nolte, Drama) 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category)  
      values (2, 'Speed', '1999, FEB 12', Keanu, Reeves, Action) 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category) 
      values (3, 'Superman', '1982, MAR 7', Chris, Reeve, Action) 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category) 
      values (4, 'Ice Age', '2002, April 2', Chris, Rock, Cartoon) 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category) 
      values (5, 'Bowfinger', '2001, August 03', Eddie, Murphy, Comedy); 
select * from dual; 

然而,当我跑的代码,它返回的结果如下:

DUMMY 
----- 
1 x 

这是什么意思?如何解决?

+1

'从dual'选择*? – Aleksej

回答

1
  1. INSERT ALLSELECT之间有错误的分号;这意味着它们是两种不同的陈述,而不是单一的陈述。
  2. 您错过了许多报价来包装您的字符串值
  3. 您无法以此方式插入日期值;你必须使用一个to_date或使用ANSI标准

您可以重写代码为:

insert all 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category) 
      values (1, 'New York Stories', date '1984-01-01', 'Nick', 'Nolte', 'Drama') 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category)  
      values (2, 'Speed', date '1992-02-12', 'Keanu', 'Reeves', 'Action') 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category) 
      values (3, 'Superman', date '1982-03-07', 'Chris', 'Reeve', 'Action') 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category) 
      values (4, 'Ice Age', to_date ('02/04/2002', 'dd/mm/yyyy'), 'Chris', 'Rock', 'Cartoon') 
into movie_stars (movie_number, movie_title, year_released, first_name, last_name, movie_category) 
      values (5, 'Bowfinger', date '2001-08-03', 'Eddie', 'Murphy', 'Comedy') 
select * from dual; 
+0

谢谢你Aleksej!我以为我只需要日期和多个单词的引号。另一件事,当我稍后检索数据以加倍时,请检查,即使使用to_date函数,第4行的日期格式也不会更改。 – Tim

+0

它们只是两种不同的写日期值的方法,但结果是绝对相同的;如果你需要一个特定的格式,比如说你必须从一个输入字符串中获得一个日期,你可以使用to_date和适当的格式掩码;如果你只需要写一个日期值,你可以使用更简单的(恕我直言)ANSI方式 – Aleksej

+0

明白了。谢谢! – Tim