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


 

此問題的原因是因為表的列名稱使用了Oracle聲明的關鍵字,列名起的不好引起的。

如果列很多,又不好確定是哪個列名使用了關鍵字,以下建議可供參考:

select * from v$reserved_words where keyword
in( 
select COLUMN_NAME 
from all_tab_columns 
where table_name = 'HP_FFS' and owner='用戶名大寫'
);

 

 

  除了與oracle關鍵字段沖突錯誤外(select * from v$reserved_words;--查詢oracle數據庫關鍵字),還有一種可能是po映射時的字段是否與數據庫中的字段匹配,包括檢查有外鍵關聯所關聯的PO中的各個字段映射是否正確。

  此外,也有可能是SQL語句查詢插入的列名的最后多了一個“,”逗號等原因,也會引起這種錯誤。

 

 

一些具體的解決方案建議:

 

情形1

1.創建表是不使用ORACLE的關鍵字作為表字段名。

 

2.oracle 表字段關鍵字的查詢 : 把字段名加上雙引號,並且嚴格區分大小寫。

 

建議采用第一種方法解決,減少出現其他問題的幾率。

 

情形2

 

1、首先我們要確認哪些字符串是Oracle的關鍵字,具體可通過Oracle提供的V$RESERVED_WORDS

2、對歷史遺留系統的處理

  • 考慮修改表的列名,風險較大
  • 修改特定查詢語句

3、驗證

通過驗證得出結論:

  • 在查詢列中使用雙引號
  • 要注意列的大小寫
     
CREATE TABLE WYC_TEST(CODE VARCHAR2(20), ADDR VARCHAR2(40));
    
INSERT INTO WYC_TEST(CODE,ADDR) VALUES('00', 'ADDR00');
ALTER TABLE WYC_TEST ADD "ROW" VARCHAR2(20);
ALTER TABLE WYC_TEST ADD "Row" VARCHAR2(20);
ALTER TABLE WYC_TEST ADD "RoW" VARCHAR2(30);
INSERT INTO WYC_TEST(CODE,ADDR, "ROW") VALUES('00', 'ADDR00', 'abc');
UPDATE WYC_TEST SET "ROW" = WYC_TEST.ADDR || '_ROW', "Row"=WYC_TEST.ADDR || '_Row', "RoW"=WYC_TEST.ADDR || '_RoW'

SELECT * FROM WYC_TEST;

 

 

 

 

參考文章:

1. 關於報錯“ORA-01747: user.table.column, table.column 或列說明無效”的解決辦法

2. ORA_01747:User.table.column 或列說明無效

3. ORA-01747: user.table.column, table.column 或列說明無效n, table.column 或列


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM