繁体   English   中英

从具有特定列和序列号的现有表中创建一个新表(Oracle SQL)

[英]Create a new table from existing table with specific columns and a sequence number (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

但是不断出现错误。 每当我认为自己掌握了它时,都会出错。 任何帮助表示赞赏。
谢谢

要从序列中填充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;

有关更多详细信息,请参见手册:

您可以执行以下操作:

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

不过,我会小心谨慎。 您的原始表有一个主键,因此我认为应该随处随行。 另外,我看不到这种桌子有什么用。 您始终可以在需要时轻松生成它,例如,通过在查询中使用CTE。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM