【问题标题】:Can't create table with script because of ENUM由于 ENUM,无法使用脚本创建表
【发布时间】:2021-01-14 21:33:16
【问题描述】:

我目前正在学校学习一些关于 sql 的基本知识。我们收到了一个练习,其中包括创建一个创建表的脚本。我们有一个架构,我们需要重新创建它。

我遇到了一些问题:

当我运行脚本时,它显示了这个错误:

CREATE TABLE "EMPLOYEE" ( "BIRTH_DATE"  DATE , "FIRST_NAME"     VARCHAR(14) , "LAST_NAME"               VARCHAR(16) , "GENDER"               ENUM('M','F') , "HIRE_DATE"          DATE ) IN "TS_EMPLOYEE"
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0104N  An unexpected token "(" was found following "16) , "GENDER"  ENUM".
Expected tokens may include:  "DEFAULT".  SQLSTATE=42601

我在 Internet 上查找错误并认为我应该指定 DEFAULT。出于这个原因,我修改了添加这部分的脚本:

"GENDER" ENUM('M','F')DEFAULT 'M' ,

不幸的是,它对我没有多大帮助,因为它表明我犯了和以前一样的错误。 有谁知道我错在哪里?或者我可以改变什么?

感谢任何形式的帮助! ^^

【问题讨论】:

  • 请编辑您的问题以准确显示您如何提交 SQL 。你在使用命令行吗?还是其他什么工具?另外ENUM 在 Db2 DDL 中无效,您可以使用 column-check-constraint 来进行简单检查,也可以使用其他方式。
  • 为 mao 和 Gordon Linoff 所说的添加一些信息,当您告诉 DB2 GENDER ENUM(... 时,DB2 语句解析器认为您需要一个名为 GENDER 的用户定义类型 ENUM 的列,这可能是不存在,并且像任何用户定义的类型语法一样不接受任何参数。这就是为什么它不会抱怨 ENUM 而是抱怨 ( 什么都没有
  • 大家好!谢谢你的提示。我正在研究 DB2。我们将脚本保存在我们的 CentOS 服务器中,并使用 puTTY 和 WinSCP,我编辑并运行它们。可能有更好的方法来做到这一点,但这是我在学校学到的._。顺便说一句,我不知道 DB2 不支持“ENUM”。感谢 Gordon Linoff 的回答,脚本再次运行 :) P.S:我想先创建表,然后是键,所以不用担心 :)

标签: sql database enums db2


【解决方案1】:

我认为 DB2 不支持枚举。如果您使用的是 DB2,则使用 check 约束:

CREATE TABLE EMPLOYEE (
    BIRTH_DATE DATE,
    FIRST_NAME VARCHAR(14),
    LAST_NAME VARCHAR(16), 
    GENDER CHAR(1),
    HIRE_DATE DATE,
    CHECK (GENDER IN ('M', 'F'))
);

注意事项:

  1. 我删除了双引号。只是不要将它们用作标识符。它们只会使查询变得混乱并引入奇怪错误的可能性。
  2. 我认为这样的表应该有一个主键,虽然我没有添加主键。
  3. 名称字符串的长度似乎过短。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多