【问题标题】:SQL create table column AS SELECT FROM OTHER TABLESQL 创建表列 AS SELECT FROM OTHER TABLE
【发布时间】:2016-03-18 12:50:32
【问题描述】:

我的问题是我无法使用基于其他表的 2 列的列创建正确的 DDL 语句“创建表”。

决赛桌应如下所示:

CREATE TABLE PRACOWNICY_ZESPOLY AS
  SELECT 12*PLACA_POD + NVL(PLACA_DOD,0) AS ROCZNA_PLACA FROM PRAC;

ALTER TABLE PRACOWNICY_ZESPOLY 
  ADD (
      NAZWISKO VARCHAR(20),
      POSADA VARCHAR(20),
      ZESPOL NUMBER(4),
      ADRES_PRACY VARCHAR(20) );

我正在尝试这样的事情:

CREATE TABLE PRACOWNICY_ZESPOLY (
  NAZWISKO VARCHAR(20),
  POSADA VARCHAR(20),
  ZESPOL NUMBER(4),
  ADRES_PRACY VARCHAR(20),
  ROCZNA_PLACA NUMBER(6,2) AS (SELECT 12*PLACA_POD + NVL(PLACA_DOD,0) FROM PRAC));

结果:

SQL 错误:ORA-00936:缺少表达式

CREATE TABLE PRACOWNICY_ZESPOLY (
  NAZWISKO VARCHAR(20),
  POSADA VARCHAR(20),
  ZESPOL NUMBER(4),
  ADRES_PRACY VARCHAR(20))
  AS SELECT 12*PLACA_POD + NVL(PLACA_DOD,0) FROM PRAC;

结果:

SQL 错误:ORA-01773:可能未在此 CREATE TABLE 中指定列数据类型

CREATE TABLE PRACOWNICY_ZESPOLY AS
  SELECT 12*PLACA_POD + NVL(PLACA_DOD,0) AS ROCZNA_PLACA FROM PRAC, 
  (NAZWISKO VARCHAR(20),
  POSADA VARCHAR(20),
  ZESPOL NUMBER(4),
  ADRES_PRACY VARCHAR(20));

结果:

SQL 错误:ORA-00907:缺少右括号

【问题讨论】:

  • 只有当你拔掉插头时,计算机被指示做某事并且“没有结果”。在其他所有情况下,都会有某种反应,例如错误消息。
  • 那么你到底想在这里实现什么?您是否只是在寻找一种方法来组合来自两个不同表的数据?如果是这样,请创建一个视图。一旦源表中的数据更新,您是否需要以某种方式更新您的新“表”?如果是这样,请创建一个触发器来添加数据。如果您只想查看一个无非是其他两列相加的列,为什么不在源表中创建一个计算列?

标签: sql oracle ddl


【解决方案1】:

您需要一个create 和一个insert 声明:

CREATE TABLE PRACOWNICY_ZESPOLY 
(
  ROCZNA_PLACA  number, 
  NAZWISKO      VARCHAR(20),
  POSADA        VARCHAR(20),
  ZESPOL        NUMBER(4),
  ADRES_PRACY   VARCHAR(20)
);

insert into PRACOWNICY_ZESPOLY (ROCZNA_PLACA) 
SELECT 12 * PLACA_POD + NVL(PLACA_DOD,0) 
FROM PRAC;

【讨论】:

    【解决方案2】:

    我在this 问题中找到了一个可行的解决方案。

    您需要将 get_ddl 与 CTAS 语法结合起来。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-12
      • 1970-01-01
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多