天天看點

“ORA-01747: user.table.column, table.column 或列說明無效” 的解決方案

此問題的原因是因為表的列名稱使用了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,如需轉載請自行聯系原作者