0

尝试使用 asp.net 和 oracleclient 连接器更新 oracle 10g 表

这是sql语法:

UPDATE tableX set PURPOSE = 'T' where REQUEST_ID = '2543'

这会引发错误:

ORA-00904: "PURPOSE": invalid identifier

如果我尝试更新不同的列

UPDATE tableX set DELIVERY_COMMENTS = 'T' where REQUEST_ID = '2543'

一切正常。

PURPOSE 列确实存在,我可以将信息插入到 PURPOSE 列中。

任何人都知道为什么这不起作用?

4

2 回答 2

1

我不认为 PURPOSE 是一个重新定义的词,但如果是的话,它必须用双引号括起来" set "PURPOSE" = 'T'

列名可以是小写或混合大小写。运行select * from tableX where rownum < 2并查看 SqlPlus 说的列名是什么。确定列名大小写的明确方法是

   select c.owner, c.column_id, c.column_name
     from all_tab_cols c
     where c.table_name = 'TABLEX'
     order by  c.owner, c.column_id

请注意,“TABLEX”全为大写。如果 PURPOSE 不是全部大写,则必须用双引号括起来,以便 Oracle 区分大小写。

于 2011-02-24T17:14:52.793 回答
1

好的...这是答案

操作员错误

我以 user2 身份连接到数据库,这使我进入了 user2 模式。user2 模式有一个使用名为 user2.target_table 的 user1.target_table 的视图。问题是视图的设置如下

“从 user1.target_table 中选择 field1、field2”

向 user1.target_table 添加了一个新字段,但未更新 user2 架构中的视图以反映更改。

我通过将 UPDATE 语句完全限定为

更新 user1.target_table 设置 PURPOSE = 'T' where field1 = '1'

更新声明就像一个冠军。

经验教训......不要在一个模式中创建一个视图,其名称在另一个模式中使用。

希望这能澄清我的 PEBKAC(键盘和椅子之间存在问题)

于 2011-02-28T14:52:34.500 回答