Oracle ORA-01948:identifier's name length(%s)exceeds maximum(%s)報錯的解決

maohaiqing0304發表於2015-02-04



標題:Oracle ORA-01948:identifier's name length(%s)exceeds maximum(%s)報錯的解決  

作者:lōττéry©版權所有[文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任.]



***  今天將一個大結果集建立一張普通表時 報ORA-01948錯
*** 如下是簡版介紹 


SQL> 
  2   create table t_1 as
  3    select
  4              temp.EMP_ID,
  5              temp.EMP_NAME,
  6              temp.ID_CARD_NO,
  7              sum(PER_PAY_FEES_AMO+COM_PAY_FEES_AMO) ** 等欄位
  8              from ......  ** 等資訊

ORA-01948 : identifier's name length (38) exceeds maximum (30)
  
SQL> 


錯誤介紹:
[oracle@xcf ~ ]$ oerr ora 01948
01948, 00000, "identifier's name length (%s) exceeds maximum (%s)"
// *Cause: A name has been specified that is too long.
//         For example, dbms_session.is_role_enabled() specifies a role name
//         that is too long.
// *Action: Change the application or command to use a correct identifier.
[oracle@xcf ~ ]$

根本原因:
*** In oracle database, all the object names must not be greater than 30 characters in length. 

檢視sum(PER_PAY_FEES_AMO+COM_PAY_FEES_AMO)欄位的長度 ... 38字元很符合報錯 
SQL> SELECT lengthb('sum(PER_PAY_FEES_AMO+COM_PAY_FEES_AMO)') FROM dual ;
 
LENGTHB('SUM(PER_PAY_FEES_AMO+
------------------------------
                            38
 
檢視長度為30字元的欄位,確認是否不報錯
SQL> SELECT lengthb('sum(SF_SB_SUM_AMO+FLF+FLF+FLF)') FROM dual ;
 
LENGTHB('SUM(SF_SB_SUM_AMO+FLF
------------------------------
                            30  
 
SQL>    ***  建立成功..
SQL> 
  2   create table t_1 as
  3    select
  4              temp.EMP_ID,
  5              temp.EMP_NAME,
  6              temp.ID_CARD_NO,
  7              sum(SF_SB_SUM_AMO+FLF+FLF+FLF) ** 等欄位
  8              from ......  ** 等資訊
 
Table created
 
SQL>  
  
 
   【源於本人筆記】 若有書寫錯誤,表達錯誤,請指正...


此條目發表在 SQL、SQL最佳化篇 分類目錄。將固定連線加入收藏夾。


 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28602568/viewspace-1426422/,如需轉載,請註明出處,否則將追究法律責任。

相關文章