单行子查询在Oracle

时间:2015-10-06 20:42:09

标签: database oracle

我是Oracle SQL的新手,并且正在为我正在进行的数据库应用程序课程分配任务,其中一部分任务是从一个表中传输一些数据(empno,bonus_date,job,sal和comm)在命令行上使用SQL。

为了传输数据,我使用子查询以及to_date()函数(赋值指定将当前日期插入到新表中,因为它正在添加,除了来自旧表的数据),但仍然收到以下错误:

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

我通过电子邮件发送了我的教授,他建议错误可能是我的 to_date()功能带来额外空间的结果,但在更改之后,错误仍然存​​在。

我也试过更改子查询的格式,但也无济于事。 以下是我正在使用的两个表( emp 是旧表, emp_hist 是新表):

emp (旧)表:

 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 

对此有任何见解将不胜感激!如果需要任何其他信息,请告诉我,我会尽力提供!

谢谢!

1 个答案:

答案 0 :(得分: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;