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:此处不允许列的主要内容,如果未能解决你的问题,请参考以下文章
更改表,添加列 / ORA-00984:此处不允许列 PLSQL