使用特定列和序列号从现有表创建新表(Oracle SQL)

时间:2016-03-12 14:18:19

标签: sql oracle

我试图弄清楚如何从现有表中创建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 个答案:

答案 0 :(得分:2)

要从首先创建序列的序列中填充emp编号,然后在select语句中使用它:

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;

有关详细信息,请参阅手册:

答案 1 :(得分:0)

你可以这样做:

CREATE TABLE NEW_EMP AS 
SELECT ROW_NUMBER() OVER (ORDER BY EMPPK) + 999 as EMP_NUM,
       SSN, FNAME, LNAME, BDATE
FROM EMPLOYEE;
但是,我会小心这样做。你的原始表有一个主键,所以我认为应该跟随每一行的每一行。另外,我觉得这样的桌子用处不大。您可以随时在需要时轻松生成它,例如,在查询中使用CTE。