【问题标题】:Error Inserting Data into SQL Tables将数据插入 SQL 表时出错
【发布时间】:2016-03-12 04:41:48
【问题描述】:

我很难弄清楚我的数据出了什么问题。我不断收到错误 ORA-00984,此处不允许列。列是 84,它是性别角色。该表是使用以下语句创建的:

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
  );

这里是插入语句:

INSERT INTO EMPLOYEE (FNAME, MINIT, LNAME, SSN, BDATE, ADDRESS, SEX, SALARY, SUPER_SSN, DNO)
VALUES ('John', 'B', 'Smith', 123456789, '1965-02-09', '731 Fondren, Houston, TX', M, 30000, 333445555, 5);

过去一个小时左右我一直在盯着这个,但无法弄清楚。我错过了什么?

【问题讨论】:

  • 你能解释一下什么错误吗?
  • 这是来自 SQL 的错误:错误从第 33 行开始在命令中 - INSERT INTO EMPLOYEE (FNAME, MINIT, LNAME, SSN, BDATE, ADDRESS, SEX, SALARY, SUPER_SSN, DNO ) VALUES ('John', 'B', 'Smith', 123456789, '1965-02-09', '731 Fondren, Houston, TX', M, 30000, 333445555, 5) 命令行错误:34 列: 84 错误报告 - SQL 错误:ORA-00984:此处不允许列 00984。00000 -“此处不允许列” *原因:
  • 希望这项工作:使用 M 作为 'M' 。
  • M是列名,'M'是字符串字面量

标签: sql oracle


【解决方案1】:

也许这个解决方案对你有用:

INSERT INTO EMPLOYEE (FNAME, MINIT, LNAME, SSN, BDATE, ADDRESS, SEX, SALARY, SUPER_SSN, DNO)
VALUES ('John', 'B', 'Smith', '123456789', '1965-02-09', '731 Fondren, Houston, TX', 'M', 30000, '333445555', 5);

【讨论】:

  • 我试过了。这是我得到的错误: SQL 错误:ORA-01861:文字与格式字符串 01861 不匹配。00000 -“文字与格式字符串不匹配” *原因:输入中的文字必须与格式字符串中的文字长度相同(前导空格除外)。如果启用了“FX”修饰符,则文字必须完全匹配,没有多余的空格。 *操作:更正格式字符串以匹配文字。
  • BDATE 可能需要使用to_date 函数进行日期转换。
  • 我已经考虑过了。但是错误似乎指向了性别列。
  • 插入日期使用 to_date(BDATE,'DD-Mon-YYYY') 并插入日期为 to_date(BDATE, '12-Jan-2014')
【解决方案2】:

在您的 CREATE TABLE 语句中,您没有指定性别表的大小,CHAR 的默认大小为 1。这意味着您只能在性别列中插入 1 个字符。否则需要像

这样的更改
 SEX CHAR(6)
 MINIT CHAR('*the max size of string you want to put into this column*')

请注意,我在 sex 中使用 6 作为字符大小,因为您可以插入的字符串的最大大小为 6(对于 'female')。

【讨论】:

  • 好吧,我只是修改了表格以生成 MINIT 和 SEX char(1)。那仍然没有用。仍然出现同样的错误。
  • 我可以接受 SEX 是 1 个字符。 M 或 F。
【解决方案3】:

所以问题有两个方面。日期格式不正确。应该是 01-JAN-1965。而 SEX(M 或 F)需要在它们周围加上单引号。我想这表明你不应该相信给你的数据。

【讨论】:

    猜你喜欢
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    相关资源
    最近更新 更多