why ora1801

From: haomiao <miaohaoz_at_ustc.edu>
Date: Thu, 3 Jul 2008 08:46:15 -0700 (PDT)
Message-ID: <d3d1be5b-540e-4216-a1a8-db1768fa625e@v26g2000prm.googlegroups.com>


Hi

     My proc program report a ora1801 error. My code is like this

-----tblPdspTxnMon.h------------
typedef struct
{

    char  sa_pri_key[ 36 ];
    char  sa_related_key[ 36 ];
    char  sa_alt_key[ 36 ];
    char  sa_lock_ind[ 2 ];
    char  sa_rout_fwd_id[ 14 ];
    char  sa_rout_rcv_id[ 14 ];
    char  sa_slmt_sys_date[ 5 ];

    short n_slmt_group;
    char  sa_slmt_loc_date[ 5 ];
    char  sa_slmt_fwd_id[ 14 ];
    char  sa_slmt_rcv_id[ 14 ];
    char  sa_slmt_mcht_id[ 16 ];
    char  sa_slmt_term_id[ 9 ];
    char  sa_slmt_batch_num[ 7 ];
    short n_txn_type;

    short n_txn_fwd_stat;
    short n_txn_rcv_stat;
    char  sa_slmt_pri_acct[ 24 ];
    int   sa_txn_amount;
    int   sa_orig_amount;
    char  sa_slmt_cur_code[ 4 ];
    char  sa_auth_rsp_code[ 8 ];
    char  sa_slmt_fee_type[ 9 ];
    char  sa_acct[ 24 ];
    char  sa_rsp_code1[ 3 ];
    char  sa_rsp_code2[ 3 ];
    char  sa_rsp_code3[ 3 ];
    char  sa_cmp_data[ 21 ];
    char  sa_sav1_data[ 201 ];
    char  sa_sav2_data[ 51 ];
    char  sa_rsp_data[ 51 ];
    char  sa_bak_data[ 81 ];
    char  sa_comm_data[ 41 ];
    int   l_total_fee;
    int   l_fwd_fee_1;
    int   l_fwd_fee_2;
    int   l_rcv_fee_1;

    int l_rcv_fee_2;
    int l_rec_updt_usr_id;
    char  tm_rec_updt_time[ 30 ];
    char  tm_rec_crt_time[ 30 ];
    char  sa_row_id[ 19 ];

} tbl_txn_mon_t;
tbl_pdsp_txn_mon.pc---------------------------------------------------------
int tbl_txn_mon2_fetch_slice(tbl_txn_mon_t *tbl_txn_mon, int *sql_code)
{

    EXEC SQL BEGIN DECLARE SECTION;
    tbl_txn_mon_t *db_tbl_txn_mon;
    EXEC SQL END DECLARE SECTION;     db_tbl_txn_mon = tbl_txn_mon;

    EXEC SQL FETCH
        cur_txn_mon2_slice
    INTO
:db_tbl_txn_mon->sa_pri_key,
:db_tbl_txn_mon->sa_related_key,
:db_tbl_txn_mon->sa_alt_key,
:db_tbl_txn_mon->sa_lock_ind,
:db_tbl_txn_mon->sa_rout_fwd_id,
:db_tbl_txn_mon->sa_rout_rcv_id,
:db_tbl_txn_mon->sa_slmt_sys_date,
:db_tbl_txn_mon->n_slmt_group,
:db_tbl_txn_mon->sa_slmt_loc_date,
:db_tbl_txn_mon->sa_slmt_fwd_id,
:db_tbl_txn_mon->sa_slmt_rcv_id,
:db_tbl_txn_mon->sa_slmt_mcht_id,
:db_tbl_txn_mon->sa_slmt_term_id,
:db_tbl_txn_mon->sa_slmt_batch_num,
:db_tbl_txn_mon->n_txn_type,
:db_tbl_txn_mon->n_txn_fwd_stat,
:db_tbl_txn_mon->n_txn_rcv_stat,
:db_tbl_txn_mon->sa_slmt_pri_acct,
:db_tbl_txn_mon->sa_txn_amount,
:db_tbl_txn_mon->sa_orig_amount,
:db_tbl_txn_mon->sa_slmt_cur_code,
:db_tbl_txn_mon->sa_auth_rsp_code,
:db_tbl_txn_mon->sa_slmt_fee_type,
:db_tbl_txn_mon->sa_acct,
:db_tbl_txn_mon->sa_rsp_code1,
:db_tbl_txn_mon->sa_rsp_code2,
:db_tbl_txn_mon->sa_rsp_code3,
:db_tbl_txn_mon->sa_cmp_data,
:db_tbl_txn_mon->sa_sav1_data,
:db_tbl_txn_mon->sa_sav2_data,
:db_tbl_txn_mon->sa_rsp_data,
:db_tbl_txn_mon->sa_bak_data,
:db_tbl_txn_mon->sa_comm_data,
:db_tbl_txn_mon->l_total_fee,
:db_tbl_txn_mon->l_fwd_fee_1,
:db_tbl_txn_mon->l_fwd_fee_2,
:db_tbl_txn_mon->l_rcv_fee_1,
:db_tbl_txn_mon->l_rcv_fee_2,
:db_tbl_txn_mon->l_rec_updt_usr_id,
:db_tbl_txn_mon->tm_rec_updt_time,
:db_tbl_txn_mon->tm_rec_crt_time;

    if(sqlca.sqlcode) {

        DB_TRACE_CA( &sqlca );
        *sql_code = sqlca.sqlcode;
        return -1;

    }

    return 0;

}


   After checking, I find the field "sa_comm_data" defined error, in database this column
is raw(40), this need the "sa_comm_data" in tbl_txn_mon_t be char[81].

   But why oracle report 1801? ther are only two column with type "date", tm_rec_updt_time and tm_rec_crt_time.

   And more, in the first 3 or 4 fetching, there is no error, after that, 1801 is the most.

   And in AIX5.2.0.7 there is no error, oracle version is 9.2.0.7.  In sco unix 7.1.3 , 1801 are reported, oracle version is 8.1.7.0.0. Received on Thu Jul 03 2008 - 10:46:15 CDT

Original text of this message