Chinaunix

标题: PRO*C中调用存储过程参数绑定问题,如何绑定结构数组变量? [打印本页]

作者: puss_yang    时间: 2007-01-02 14:42
标题: PRO*C中调用存储过程参数绑定问题,如何绑定结构数组变量?
1.包定义
CREATE OR REPLACE PACKAGE CARD_BATCH AS
   TYPE CURSOR_TYPE  IS REF CURSOR;
   TYPE recTracStatics IS RECORD(
           BP_FLAG        CHAR(1),/*公司/个人标志*/
           CURR_NUM       CHAR(3),/*币种*/
           SD_CMPDRP      NUMBER(11,2),/*复利借方*/
           SD_CMPCRP      NUMBER(11,2),/*复利贷方*/
           SD_INTDRP      NUMBER(11,2),/*应收利息借方*/
           SD_INTCRP      NUMBER(11,2),/*应收利息贷方*/
           SD_LOANAMTDRP  NUMBER(11,2),/*贷款借方*/
           SD_LOANAMTCRP  NUMBER(11,2),/*贷款贷方*/
           SD_DEPAMTDRP   NUMBER(11,2),/*存款借方*/
           SD_DEPAMTCRP   NUMBER(11,2)/*贷款贷方*/
        );
   TYPE  arrTracStatics IS TABLE OF recTracStatics INDEX BY BINARY_INTEGER;

      PROCEDURE CAL_TRAC(vsDbName IN VARCHAR2,
                      vsBankNo IN VARCHAR2,
                      voErrCode OUT NUMBER,
                      voErrMsg OUT VARCHAR2,
                      vlisTracStatics OUT arrTracStatics);
                     
        
END CARD_BATCH;

2.包体定义
CREATE OR REPLACE PACKAGE BODY CARD_BATCH  AS

PROCEDURE CAL_TRAC
  (
         vsDbName IN VARCHAR2,
         vsBankNo IN VARCHAR2,
        voErrCode OUT NUMBER,
        voErrMsg OUT VARCHAR2,
        vlisTracStatics OUT arrTracStatics
  ) IS
       
BEGIN
     .....................;

END;
END  CARD_BATCH  ;

3.PRO*C中调用存储过程部分代码
  
main(int argc,char **argv)
{
EXEC SQL BEGIN DECLARE SECTION;
        struct recTracStatics{                                                                             char BP_FLAG[2],/*公司/个人标志*/                                                  char CURR_NUM[3],/*币种*/                                                          float SD_CMPDRP,/*复利借方*/                                                       float SD_CMPCRP,/*复利贷方*/                                                       float SD_INTDRP,/*应收利息借方*/                                                   float SD_INTCRP,/*应收利息贷方*/                                                   float SD_LOANAMTDRP,/*贷款借方*/                                                   float SD_LOANAMTCRP,/*贷款贷方*/                                                   float SD_DEPAMTDRP,/*存款借方*/                                                    float SD_DEPAMTCRP/*贷款贷方*/                                             } ;                                                                                        struct recTracStatics  lisTracStatics[100];                                                long        voErrCode;
        char        voErrMsg[4096];
EXEC SQL END DECLARE SECTION;

............................
EXEC SQL EXECUTE
        BEGIN
                CARD_BATCH.CAL_TRC(
                        'TESTDB',
                        '0100',
                        :voErrCode,
                        :voErrMsg,
                        :lisTracStatics
                        );
        END;
END-EXEC;

............................

}

4.执行时总是报 -1046错误,请问是什么原因?

5.PRO*C调用存储过程时如何绑定结构数组变量?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2