此問題的原因是因為表的列名稱使用了Oracle聲明的關鍵字,列名起的不好引起的。
如果列很多,又不好确定是哪個列名使用了關鍵字,以下建議可供參考:
1
2
3
4
5
6
<code>select</code> <code>* </code><code>from</code> <code>v$reserved_words </code><code>where</code> <code>keyword</code>
<code>in</code><code>(</code>
<code>select</code> <code>COLUMN_NAME</code>
<code>from</code> <code>all_tab_columns</code>
<code>where</code> <code>table_name = </code><code>'HP_FFS'</code> <code>and</code> <code>owner=</code><code>'使用者名大寫'</code>
<code>);</code>
除了與oracle關鍵字段沖突錯誤外(select * from v$reserved_words;--查詢oracle資料庫關鍵字),還有一種可能是po映射時的字段是否與資料庫中的字段比對,包括檢查有外鍵關聯所關聯的PO中的各個字段映射是否正确。
此外,也有可能是SQL語句查詢插入的列名的最後多了一個“,”逗号等原因,也會引起這種錯誤。
一些具體的解決方案建議:
情形1
1.建立表是不使用ORACLE的關鍵字作為表字段名。
2.oracle 表字段關鍵字的查詢 : 把字段名加上雙引号,并且嚴格區分大小寫。
建議采用第一種方法解決,減少出現其他問題的幾率。
情形2
1、首先我們要确認哪些字元串是Oracle的關鍵字,具體可通過Oracle提供的V$RESERVED_WORDS
2、對曆史遺留系統的處理
考慮修改表的列名,風險較大
修改特定查詢語句
3、驗證
通過驗證得出結論:
在查詢列中使用雙引号
要注意列的大小寫
7
8
9
10
<code>CREATE</code> <code>TABLE</code> <code>WYC_TEST(CODE VARCHAR2(20), ADDR VARCHAR2(40));</code>
<code> </code>
<code>INSERT</code> <code>INTO</code> <code>WYC_TEST(CODE,ADDR) </code><code>VALUES</code><code>(</code><code>'00'</code><code>, </code><code>'ADDR00'</code><code>);</code>
<code>ALTER</code> <code>TABLE</code> <code>WYC_TEST </code><code>ADD</code> <code>"ROW"</code> <code>VARCHAR2(20);</code>
<code>ALTER</code> <code>TABLE</code> <code>WYC_TEST </code><code>ADD</code> <code>"Row"</code> <code>VARCHAR2(20);</code>
<code>ALTER</code> <code>TABLE</code> <code>WYC_TEST </code><code>ADD</code> <code>"RoW"</code> <code>VARCHAR2(30);</code>
<code>INSERT</code> <code>INTO</code> <code>WYC_TEST(CODE,ADDR, </code><code>"ROW"</code><code>) </code><code>VALUES</code><code>(</code><code>'00'</code><code>, </code><code>'ADDR00'</code><code>, </code><code>'abc'</code><code>);</code>
<code>UPDATE</code> <code>WYC_TEST </code><code>SET</code> <code>"ROW"</code> <code>= WYC_TEST.ADDR || </code><code>'_ROW'</code><code>, </code><code>"Row"</code><code>=WYC_TEST.ADDR || </code><code>'_Row'</code><code>, </code><code>"RoW"</code><code>=WYC_TEST.ADDR || </code><code>'_RoW'</code>
<code>SELECT</code> <code>* </code><code>FROM</code> <code>WYC_TEST;</code>
參考文章:
沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。
本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/5734220.html,如需轉載請自行聯系原作者