-2

创建视图时出现错误(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个字符。期待您的帮助。

4

2 回答 2

3

尝试为该函数提供一个别名(少于 30 个字符)DECODE

例子:

DECODE( ...stuff... ) MYALIAS
于 2013-02-13T14:03:51.530 回答
1

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

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

select * from ( select ...

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

无论如何,您可以简单地通过给您的 DECODE() 列提供一个长度可接受的别名来解决问题。

于 2013-02-13T14:25:55.227 回答