【问题标题】:Create table as select statement primary key in oracle在oracle中创建表作为select语句主键
【发布时间】:2020-01-28 23:08:24
【问题描述】:

在创建表时可以指定哪个是主键作为选择语句吗?我的目标是在创建表上包含主键声明,而不是在创建后修改表。

CREATE TABLE suppliers
AS (SELECT company_id, address, city, state, zip
  FROM companies
  WHERE company_id < 5000);

【问题讨论】:

  • 您使用的是哪个 Oracle 版本?
  • @Abra 我正在使用 SQL Developer
  • SQL Developer 是一个 IDE。您使用的是哪个 Oracle 数据库版本?是11g吗?是12c吗?是18c吗?来自Oracle SQL Developer 网页:Oracle SQL Developer 是一个免费的集成开发环境。换句话说,Oracle SQL Developer不是数据库。
  • @Abra 目前使用 10g。

标签: oracle plsql plsqldeveloper sql-scripts


【解决方案1】:

是的,这是可能的。您需要明确指定列:

CREATE TABLE suppliers (
    company_id primary key, 
    address, 
    city, 
    state, 
    zip
) 
AS 
  SELECT company_id, address, city, state, zip
    FROM companies
    WHERE company_id < 5000;

Here is a demo

注意:在这种情况下,主键约束将被赋予一个系统生成的名称。如果您希望它具有自定义名称,则必须在执行 alter table suppliers add constraint &lt;&lt;custom constraint name&gt;&gt; primary key(&lt;&lt;primary_key_column_name&gt;&gt;) 后执行(未指定 primary keyCREATE TABLE suppliers.. DDL 语句。

【讨论】:

  • 在“as with”中使用create table语句时是否也适用?
  • @absolute 是的。
【解决方案2】:

是的,有可能。你可以参考下面的例子。

create table student (rollno ,student_name,score , constraint pk_student primary key(rollno,student_name))
as
    select empno,ename,sal 
    from emp;

【讨论】:

    【解决方案3】:

    您可以显式创建供应商表,如果公司表中的任何列具有主键,则从公司表中复制该结构。

    或者

    创建一个相同的列来定义您想要的主键并从公司表中复制该列!

    【讨论】:

      猜你喜欢
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-03
      • 1970-01-01
      • 2017-09-24
      • 2021-01-28
      • 2013-09-15
      • 1970-01-01
      相关资源
      最近更新 更多