2016-03-12 33 views
0

我想弄清楚如何从现有表中创建Oracle SQL中的表。我只想使用某些列,并且想要将序列添加到序号为的表中。使用特定的列和序号(Oracle SQL)从现有表创建新表

CREATE TABLE EMPLOYEE 
    (
    FNAME VARCHAR2(15) NOT NULL, 
    MINIT CHAR, 
    LNAME VARCHAR2(15) NOT NULL, 
    SSN CHAR(9) NOT NULL, 
    BDATE DATE, 
    ADDRESS VARCHAR2(30), 
    SEX CHAR, 
    SALARY NUMBER(10,2), 
    SUPER_SSN CHAR(9), 
    DNO NUMBER NOT NULL, 
    CONSTRAINT EMPPK PRIMARY KEY (SSN) DISABLE, 
    CONSTRAINT EMPSUPERFK FOREIGN KEY (SUPER_SSN) REFERENCES EMPLOYEE(SSN) DISABLE 
); 

我想使用FNAME,LNAME,SSN和BDATE列:
原始表与创建。我也想添加一个新列,EMP_NUM这是一个开始顺序号在1000

我尝试:

CREATE 
TABLE NEW_EMP 
    (EMP_NUM NUMBER) 
AS 
SELECT SSN, FNAME, LNAME, BDATE 
    FROM EMPLOYEE 

但不断收到一个错误。每当我认为我已经掌握了它,我就会得到一个错误。任何帮助表示赞赏。
感谢

回答

2

从您首先需要创建一个序列,然后在SELECT语句中使用序列填充EMP号:

create sequence seq_emp_num start with 1000; 

CREATE TABLE NEW_EMP 
AS 
SELECT seq_emp_num.nextval as emp_num, SSN, FNAME, LNAME, BDATE 
FROM EMPLOYEE; 

欲了解更多详细信息,请参阅手册:

+0

谢谢。就是这样。 – Harlan

0

你可以做这样的事情:

CREATE TABLE NEW_EMP AS 
SELECT ROW_NUMBER() OVER (ORDER BY EMPPK) + 999 as EMP_NUM, 
     SSN, FNAME, LNAME, BDATE 
FROM EMPLOYEE; 

我会小心这样做,虽然。你的原始表格有一个主键,所以我认为它应该随处可见。另外,我没有看到这样的表格。您可以随时在需要时轻松生成它,例如,在查询中使用CTE。

+0

我会诚实的。这是为了一堂课,尽管课堂上没有任何地方提到这种说法。指示说使用CREATE SEQUENCE创建序列号。这就是说,当我运行它时,我得到“缺少SELECT关键字”。 – Harlan