ORA - 00972:标识符太长

时间:2013-02-13 14:00:13

标签: oracle

创建视图时出现错误(ORA - 00972:标识符太长)。

请查看查看声明。

create or replace view ELVW_ATM_REC_HANDOFF_1   
(Rectype
    ,Recseq
    ,Record_Type
    ,Record_Sequence
    ,MESSAGE_TYPE
    ,PAN
    ,PROCESSING_CODE
    ,TRANSACTION_AMOUNT
    ,TRANSACTION_CURRENCY_CODE
    ,SETTLEMENT_AMOUNT
    ,SETTLEMENT_CURRENCY_CODE
    ,Billing_AMOUNT
    ,Billing_CURRENCY_CODE
    ,Transaction_DATE
    ,Settlement_Date
    ,TRACE
    ,REFERENCE_NUMBER
    ,Switch_Log_ID
    ,AUTHORIZATION_NUMBER
    ,RESPONSE_CODE
    ,Host_Error_Code
    ,TERMINAL_ID
    ,Acceptor_ID
    ,ACQUIRING_INSTITUTION_CODE
    ,REV_FLAG
    ,Original_Trace_Number
    ,From_Account
    ,To_Account) 

as
select * from    


(select 'FT'
    ,'count'
    ,'DT'
    ,rownum
    ,msg_type
    ,pan,proc_code
    ,txn_amt
    ,txn_ccy_code
    ,setl_amt
    ,setl_ccy_code
    ,bill_amt
    ,bill_ccy_code
    ,trans_dt_time
    ,setl_date
    ,stan,trn_ref_no
    ,'iso field 60'
    ,'isofield 38'
    ,resp_code
    ,error_code
    ,term_id
    ,'ISOmessage42'
    ,acq_ins_id
    ,decode(substr(msg_type,1,1),4,reverse(msg_type),msg_type)
    ,'ISOfield90'
    ,from_acc
    ,to_acc 
    from swtb_txn_log)

解码功能似乎发生错误。如果我发表评论它的工作正常。请找到以下代码

create or replace view ELVW_ATM_REC_HANDOFF_1(Rectype,Recseq,Record_Type,Record_Sequence,MESSAGE_TYPE,PAN,PROCESSING_CODE,TRANSACTION_AMOUNT,TRANSACTION_CURRENCY_CODE,SETTLEMENT_AMOUNT,SETTLEMENT_CURRENCY_CODE,Billing_AMOUNT,Billing_CURRENCY_CODE,Transaction_DATE,/*Transaction_TIME,*/Settlement_Date,TRACE,REFERENCE_NUMBER,Switch_Log_ID,AUTHORIZATION_NUMBER,RESPONSE_CODE,Host_Error_Code,TERMINAL_ID,Acceptor_ID,ACQUIRING_INSTITUTION_CODE,/*REV_FLAG,*/Original_Trace_Number,From_Account,To_Account) as
select * from (select 'FT','count','DT',rownum,msg_type,pan,proc_code,txn_amt,txn_ccy_code,setl_amt,setl_ccy_code,bill_amt,bill_ccy_code,trans_dt_time,/*trans_dt_time,*/setl_date,stan,trn_ref_no,'iso field 60',
'isofield 38',resp_code,error_code,term_id,'ISOmessage42',acq_ins_id,/*decode(substr(msg_type,1,1),4,reverse(msg_type),msg_type),*/'ISOfield90',from_acc,to_acc from swtb_txn_log)

我检查了列名的长度。它不到30个字符。期待您的帮助。

2 个答案:

答案 0 :(得分:3)

尝试为DECODE函数提供别名(短于30个字符)。

示例:

DECODE( ...stuff... ) MYALIAS

答案 1 :(得分:1)

是的,视图规范中的所有列名都少于30个字符。

但是,您的视图包含内联查询:

select * from ( select ...

这可能是问题所在。因为它可能正试图在该中间点的DECODE()语句的标识符处运行。我说“可能”因为我无法在我的10g盒子上重现这个:定义视图的列名解决了ORA​​-01948。

无论如何,只需给DECODE()列一个可接受长度的别名即可解决问题。