【问题标题】:SQL Error: ORA-00984: column not allowed hereSQL 错误:ORA-00984:此处不允许列
【发布时间】: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 )
)

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

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

【问题讨论】:

  • 什么是LOOP_COUNTER?你能分享这段代码的整个上下文吗?

标签: sql oracle oracle11g


【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 2013-06-07
      相关资源
      最近更新 更多