在Oracle PL / SQL中获取错误ORA-06502和ORA-06512

时间:2017-01-27 21:19:56

标签: plsql oracle11g

我编写了一个选择一些数据并插入表格的程序。代码编译成功。但是,当我传递数据来执行该过程时,我收到如下错误:

Error report -
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "CUSTOM.BPUBPF", line 51
ORA-06512: at line 7
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    An arithmetic, numeric, string, conversion, or constraint error
       occurred. For example, this error occurs if an attempt is made to
       assign the value NULL to a variable declared NOT NULL, or if an
       attempt is made to assign an integer larger than 99 to a variable
       declared NUMBER(2).
 *Action:   Change the data, how it is manipulated, or how it is declared so
       that values do not violate constraints.

光标查询失败的地方是:

    CURSOR cur_BPubpfRecordInsert1 (templateId VARCHAR2,userId VARCHAR2,moduleId VARCHAR2, parentFileName VARCHAR2,seqNextVal VARCHAR2,contextBankId VARCHAR2,
 fileType varchar2,fileChkSum varchar2, msdStat char) IS
   SELECT MSD.MSG_SRL_NUM,
    FHD.HDR_SRL_NUM,CHECK_SUM,nvl(SUBSTR(MSG_DATA,INSTR(MSG_DATA, '<PayerAcctType>') + LENGTH('<PayerAcctType>'),
    INSTR(MSG_DATA, '</PayerAcctType>') - (INSTR(MSG_DATA, '<PayerAcctType>') + LENGTH('<PayerAcctType>'))),' ')
    AS ACCOUNT_TYPE, nvl(SUBSTR(MSG_DATA,INSTR(MSG_DATA, '<PayerAcctNum>') + LENGTH('<PayerAcctNum>'),
    INSTR(MSG_DATA, '</PayerAcctNum>') - (INSTR(MSG_DATA, '<PayerAcctNum>') + LENGTH('<PayerAcctNum>'))),' ')
    AS ENTITYID, ' ' BILLERSRVID,
    nvl(SUBSTR(MSG_DATA,INSTR(MSG_DATA, '<PayerID>') + LENGTH('<PayerID>'),
    INSTR(MSG_DATA, '</PayerID>') - (INSTR(MSG_DATA, '<PayerID>') + LENGTH('<PayerID>'))), ' ') AS docNum,
    MSD.STATUS, FHD.STATUS FROM TBAADM.GD_FHD FHD,
    TBAADM.GD_MSD MSD WHERE MSD.BATCH_HDR_SRL_NUM = FHD.HDR_SRL_NUM AND
    MSD.FROM_TMPL_ID = FHD.FROM_TMPL_ID AND MSD.RCRE_USER_ID = FHD.RCRE_USER_ID
    AND MSD.MODULE_ID = FHD.MODULE_ID AND IN_OUT_FILE_NAME = parentFileName
    AND MSD.RCRE_USER_ID = userId AND MSD.FROM_TMPL_ID=templateId AND MSD.MODULE_ID = moduleId
    AND FHD.FILE_TYPE = fileType AND FHD.CHECK_SUM = fileChkSum  AND MSD.STATUS = msdStat;

失败的地方是:

  MSD.FROM_TMPL_ID = FHD.FROM_TMPL_ID AND MSD.RCRE_USER_ID = FHD.RCRE_USER_ID

select查询返回以下内容:

MSG_SRL_NUM     HDR_SRL_NUM     CHECK_SUM                                   ACCOUNT_TYPE                                                                        ENTITYID                                                                            BILLERSRVID DOCNUM                                                                            STATUS    STATUS
47699           B910000007YH    1078478272                                                                                                                                                                                                                                                                                                R         R                   
47700           B910000007YH    1078478272                                                                                                                                                                                                                                                                                                 R        R                   
47701           B910000007YH    1078478272                                                                                                                                                                                                                                                                                              R       R                   
47702           B910000007YH    1078478272                                                                                                                                                                                                                                                                                               R      R                   
47703           B910000007YH    1078478272                                                                                                                                                                                                                                                                                                R         R                   
47704           B910000007YH    1078478272                                

我声明从光标获取值的变量是:

TYPE RecTyp IS RECORD (
lv_msdSrlNum                    varchar2(12) default null,
lv_fhdSrlNum                    varchar2(12) default null,
lv_chkSum                       VARCHAR2(40) default null,
lv_acctType                     varchar2(5)  default null,
lv_acctNo                       varchar2(40) default null,
lv_billerSrvId                  varchar2(35) default null,
lv_docId                        varchar2(20) default null,
lv_msdStatus                    char(1) default null,
lv_fhdStatus                    char(1)  default null
);

我无法理解为什么我的代码在该特定行中失败。

1 个答案:

答案 0 :(得分:0)

这还不是答案,但也许是一个提示。以下查询为您返回什么内容?

C(u)