SQL 错误:ORA-00984:此处不允许列

Posted

技术标签:

【中文标题】SQL 错误:ORA-00984:此处不允许列【英文标题】:SQL Error: ORA-00984: column not allowed here 【发布时间】:2016-01-01 22:04:13 【问题描述】:

我正在尝试使用这个 SQL 查询来生成一些测试数据

    INSERT INTO EVENT (ID, SOURCE, TYPE, EVENT_DATE, DESCRIPTION) VALUES (DBMS_RANDOM.Value(5000, 90000), 101, 'WARNING', (SYSDATE - 1/10 + LOOP_COUNTER/1300), DBMS_RANDOM.STRING('X', 5))

CREATE TABLE EVENT(
  ID INTEGER NOT NULL,
  SOURCE VARCHAR2(50 ),
  TYPE VARCHAR2(50 ),
  EVENT_DATE DATE,
  DESCRIPTION VARCHAR2(100 )
)

我收到错误错误报告 - 00984. 00000 - “此处不允许列”

你知道我该如何解决这个问题吗?

【问题讨论】:

什么是LOOP_COUNTER?你能分享这段代码的整个上下文吗? 【参考方案1】:

当您在VALUES 子句中使用未识别的变量时会出现此类错误。可能你的变量LOOP_COUNTER 没有声明或者写错了。

【讨论】:

【参考方案2】:

列 SOURCE 是 varchar2 的一种类型,但您提供的是整数

【讨论】:

在这种情况下,Oracle 会进行隐式类型转换。这不是错误的原因。【参考方案3】:

我们最近在实现一些复杂的数组绑定逻辑时遇到了这个错误,我的团队花了很长时间试图找出为什么会出现这个错误 - 我们认为关键字是问题所在(我们的列列表是由业务为每个客户创建的并且每个表都是动态的)。当然,这很愚蠢。

如果您正在执行数组绑定,则在设置查询时确保值列表中的所有字段前面都有一个“:”,这就是导致我们错误的原因(注意 CompanyCode 字段):

string query = "INSERT INTO SURVEY.COMPANY (RPT_INDUSTRY,SUBMISSIONID,COMPANYCODE,COLUMN) VALUES (:RPT_INDUSTRY,:SUBMISSIONID,COMPANYCODE,:COLUMN)"
command.CommandText = query;
command.CommandType = CommandType.Text;
command.BindByName = true;

【讨论】:

以上是关于SQL 错误:ORA-00984:此处不允许列的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 错误:ORA-00984 此处不允许列

ORA-00984: 此处不允许列动态 sql

ORA-00984: 此处不允许列 - 动态 SQL

更改表,添加列 / ORA-00984:此处不允许列 PLSQL

操作Oracle数据库,插入数据时显示:ORA-00984列在此处不允许错误

00984. 00000 - “此处不允许列”