【问题标题】:cant import the table( invalid datatype)无法导入表(无效数据类型)
【发布时间】:2021-06-20 22:58:58
【问题描述】:
CREATE TABLE training (
    coach_id int NOT NULL,
    customer_id int NOT NULL,
    training_time_start time  NULL,
    training_time_end time  NULL,
    training_place_id int NOT NULL,
    CONSTRAINT training_pk PRIMARY KEY (training_place_id)
);

错误报告 - ORA-00902:无效数据类型 00902. 00000 - “无效数据类型” *原因:
*行动:

我想知道哪里出错了。我正在使用 oracle 连接。

【问题讨论】:

  • time 不是 Oracle 中的数据类型。您似乎有一个用于另一个 DBMS 的脚本。您可以使用其他 DBMS 或翻译脚本。但后者需要更深入地了解脚本的作用和数据库模型。这对于本网站上的单个问题来说过于宽泛。
  • 提示:一一删除列并找到有问题的行。然后对该列的约束执行相同的操作,除非您有 <column_name> <datatype> 或错误消失。然后,您可以轻松查看有关约束定义或数据类型和列命名规则的文档。这种方式比在 SO 上询问语法错误问题快 10 倍。
  • 问题出在training_time_start, training_time_end 我该如何解决,知道吗?还有,我只是在学习
  • @ЮраЯрмак @stickybit 和 @EdStevens 在 cmets 中已经解释了这个问题。代码所指的time 类型是什么?

标签: sql oracle


【解决方案1】:

这里有一个建议。

SQL> CREATE TABLE training(
  2    training_place_id    INT,
  3    coach_id             INT NOT NULL,
  4    customer_id          INT NOT NULL,
  5    training_time_start  DATE,
  6    training_time_end    DATE,
  7    --
  8    CONSTRAINT training_pk PRIMARY KEY (training_place_id)
  9  );

Table created.

SQL>

对代码的修改:

  • 显然,DATE 被使用(而不是不存在的 TIME 数据类型)
  • 我将TRAINING_PLACE_ID“向上”移动。为什么?我更喜欢这样,以便将主键列放在列列表的顶部。为什么?它们不能是NULL,所以可以肯定这些列总是有一个值。但这并不是说它在很大程度上提高了性能(请参阅@Vincent 所说的here
    • 因为它是一个主键列,您可以(但不必)指定它是NOT NULL。无论如何,Oracle 都会为您完成:

      SQL> desc training
       Name                          Null?    Type
       ----------------------------- -------- --------------------
       TRAINING_PLACE_ID             NOT NULL NUMBER(38)
       <snip>
      

虽然您没有指定它,但看起来training 表在coach_idcustomer_id 列上缺少两个外键

【讨论】:

    猜你喜欢
    • 2018-01-13
    • 1970-01-01
    • 1970-01-01
    • 2018-04-14
    • 2018-05-09
    • 2018-05-22
    • 1970-01-01
    • 2019-03-10
    • 2022-01-05
    相关资源
    最近更新 更多