2015-10-06 1 views
0

Я относительно новичок в Oracle SQL и имею назначение для курса приложений баз данных, которое я беру, где часть задания заключается в передаче некоторых данных (empno, bonus_date, job, sal и comm) из одной таблицы в другую, используя SQL в командной строке.Подпоследовательность Single Row возвращает больше одной строки в Oracle

Для передачи данных я использую подзапросы, а также функцию to_date() (назначения назначают вставить текущую дату в новую таблицу, поскольку она добавляется, в дополнение к данным из старый стол), но продолжать получать следующее сообщение об ошибке:

ERROR at line 2: 
ORA-01427: single-row subquery returns more than one row 

Я по электронной почте моего профессора, который предположил, что ошибка может быть результат дополнительного пространства с моим to_date() функции, но после того, как его изменение все еще сохраняется.

Я также попытался изменить форматирование подзапросов, но также безрезультатно. Вот две таблицы, которые я работаю с (эми старым столом и emp_hist является новой таблицей):

эх (старый) стола:

desc emp; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
EMPNO          NOT NULL NUMBER(4) 
ENAME            CHAR(10) 
JOB            CHAR(9) 
MGR            NUMBER(4) 
HIREDATE           DATE 
SAL            NUMBER(7,2) 
COMM            NUMBER(7,2) 
DEPTNO         NOT NULL NUMBER(2) 

emp_hist (новая) таблица:

desc emp_hist; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
EMPNO          NOT NULL NUMBER(4) 
BONUS_DATE        NOT NULL DATE 
JOB            CHAR(9) 
SAL            NUMBER(7,2) 
COMM            NUMBER(7,2) 

Вот запросы (и сообщения об ошибках) что я пользуюсь и получаю:

SQL> insert into emp_hist(empno,bonus_date,job,sal,comm) 
    2 values((select empno from emp),(to_date('10/05/2015','mm/dd/yyyy')), 
    3 (select job from emp),(select sal from emp),(select comm from emp)); 
values((select empno from emp),(to_date('10/05/2015','mm/dd/yyyy')), 
     * 
ERROR at line 2: 
ORA-01427: single-row subquery returns more than one row 

Любое понимание этого было бы оценено по достоинству! Если какая-либо дополнительная информация необходима, сообщите мне, и я постараюсь изо всех сил предоставить ее!

Спасибо!

+0

MySQL, SQL Server и Oracle 3 различных технологий баз данных. Редко, что вопрос должен быть помечен более чем 1. Если вы работаете в Oracle, удалите теги MySQL и SQL Server. – jpmc26

+1

@ jpmc26 Прошу прощения за добавление вводящих в заблуждение тегов в мой пост. Это был мой первый вопрос на этом веб-сайте, поэтому я прошу прощения за это. Спасибо, что дали мне знать! – Jamiemcg

ответ

1

Если вы просто изучаете Oracle, вам действительно не нужно insert . . . values(). Более мощным заявлением является insert . . . select. То, что вы пытаетесь сделать это:

insert into emp_hist(empno, bonus_date, job, sal, comm) 
    select empno, to_date('10/05/2015','mm/dd/yyyy'), job, sal, comm 
    from emp; 
+0

И если целью является вставка «текущей даты», а не «дата с твердой кодировкой 5 октября 2015 года в полночь», то 'to_date ('10/05/2015 ',' mm/dd/yyyy ')' должен просто будьте 'sysdate' (если хотите текущее время) или' trunc (sysdate) ', если вы хотите, чтобы компонент времени был полуночи. –

+0

Спасибо, Гордон и Джастин за вашу помощь! Я ценю это! – Jamiemcg

+0

@Jamiemcg Чтобы объяснить исходную ошибку, это потому, что синтаксис 'INSERT ... VALUES' может использоваться только для вставки * одной строки *. Поэтому, когда вы используете '(select empno from emp)' как одно из значений столбца, Oracle исключает этот запрос, чтобы получить одно значение, которое он может использовать. – jpmc26

Смежные вопросы