【问题标题】:Oracle 11g _ ORA-00904 error message with Insert statementOracle 11g _ ORA-00904 带有插入语句的错误消息
【发布时间】:2023-03-29 05:11:01
【问题描述】:

我创建了一个简单的表:

 CREATE TABLE "ADVUPGRD"."GL_CAMPUSEMAILS" 
 ("Campus" VARCHAR2(2 CHAR), "SEND_TO" VARCHAR2(60 CHAR), "SEND_CC"    
   VARCHAR2(250 CHAR), "SEND_BCC" VARCHAR2(60 CHAR))

表已创建,我可以从 gl_campusemails 中选择 *,因为我还没有填充此表,所以它给了我一个空白行。 当我填充表格时,我正在使用这个:

INSERT INTO GL_CAMPUSEMAILS (Campus, Send_To, Send_CC, Send_BCC)
VALUES('CP', 'as@gmail.com', 'test@yahoo.com', 'test2@gmail.com');

但我收到此错误消息:

从第 8 行开始的错误命令 -
插入到 GL_CAMPUSEMAILS(校园、Send_To、Send_CC、Send_BCC) 值('CP'、'as@gmail.com'、'test@yahoo.com'、'test2@gmail.com')
命令行错误:8 列:56 错误报告 - SQL 错误:ORA-00904:“SEND_BCC”:标识符无效 00904. 00000 - “%s:无效标识符” *原因:
*行动:

我用谷歌搜索并发现了很多帖子,但它们大多与 select 语句中保留字的使用有关。 我不认为我在这里使用的列属于任何保留字。我在这里做错了什么

【问题讨论】:

  • docs.oracle.com/database/121/SQLRF/… 简而言之:不要在 SQL 中使用双引号
  • 不知道,这是否与您的问题有关,但在您的插入语句中缺少双引号。如果没有双引号,所有列名和表名都被解释为大写。但是在您的表格中,列是大小写混合的(因为那里有双引号)。所以它试图插入到 CAMPUS 列中,但只有一个名为 Campus 的列 - 这不一样...

标签: oracle oracle11g


【解决方案1】:

如果您在创建表格时使用双引号,则列名将完全按照您键入的内容创建,区分大小写;因此,您插入的内容应该是:

INSERT INTO GL_CAMPUSEMAILS(
                            "Campus",
                            "SEND_TO",
                            "SEND_CC",
                            "SEND_BCC"
                           )
     VALUES (
             'CP',
             'as@gmail.com',
             'test@yahoo.com',
             'test2@gmail.com'
            );

如果您创建的表格没有引号,这将正常工作

CREATE TABLE GL_CAMPUSEMAILS
(
    Campus                                  VARCHAR2(2 CHAR),
    SEND_TO                                 VARCHAR2(60 CHAR),
    SEND_CC                                 VARCHAR2(250 CHAR),
    SEND_BCC                                VARCHAR2(60 CHAR)
);

INSERT INTO GL_CAMPUSEMAILS(
                            Campus,
                            SEND_TO,
                            SEND_CC,
                            SEND_BCC
                           )
     VALUES (
             'CP',
             'as@gmail.com',
             'test@yahoo.com',
             'test2@gmail.com'
            );

注意,不使用双引号,Oracle 将考虑所有具有大写名称的对象;因此,例如,"CAMPUS"、campus、CaMpUs 将起作用,而 "campus" 将不起作用

【讨论】:

  • 天哪!谢谢!当我搜索答案时,为什么我没有得到这种解释。再次感谢,非常感谢。
  • 我修改它没有双引号,使它更容易。谢谢大家!
  • @user1557856:阅读手册 ;) 那里都有解释:docs.oracle.com/database/121/SQLRF/…
猜你喜欢
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-06
  • 1970-01-01
  • 2015-08-31
  • 1970-01-01
相关资源
最近更新 更多