系统环境:
目前正式系统分为pdmdata和pdmserv【Pdmdata】安装Oracle dbms---------【Pdmserv】安装应用软件tcua,位置:/app/teamcenter/tc2007      Pdmserv上Oracle 客户端安装位置:/app/oracle/OraHome_1/      ORACLE_HOME=/app/oracle/OraHome_1 ---------客户化功能实现用c代码直接操作Oracle时出现问题。当应用系统与oracle安装在同一台服务器上,客户化代码是可以正常访问db的,但正式系统中,,应用软件与DB服务器分别安装在两台服务器,c代码就无法正常工作了。请问该如何设置正式环境的应用服务器pdmserv或其它内容?或者是我使用的访问数据库的c代码存在问题?请给予指点。
附上c代码:
#include <stdlib.h>#ifndef SQLCA
#define SQLCA 1struct   sqlca
         {
         /* ub1 */ char    sqlcaid[8];
         /* b4  */ int     sqlabc;
         /* b4  */ int     sqlcode;
         struct
           {
           /* ub2 */ unsigned short sqlerrml;
           /* ub1 */ char           sqlerrmc[70];
           } sqlerrm;
         /* ub1 */ char    sqlerrp[8];
         /* b4  */ int     sqlerrd[6];
         /* ub1 */ char    sqlwarn[8];
         /* ub1 */ char    sqlext[8];
         };#ifndef SQLCA_NONE
#ifdef   SQLCA_STORAGE_CLASS
SQLCA_STORAGE_CLASS struct sqlca sqlca
#else
         struct sqlca sqlca
#endif#ifdef  SQLCA_INIT
         = {
         {'S', 'Q', 'L', 'C', 'A', ' ', ' ', ' '},
         sizeof(struct sqlca),
         0,
         { 0, {0}},
         {'N', 'O', 'T', ' ', 'S', 'E', 'T', ' '},
         {0, 0, 0, 0, 0, 0},
         {0, 0, 0, 0, 0, 0, 0, 0},
         {0, 0, 0, 0, 0, 0, 0, 0}
         }
#endif
         ;
#endif#endif/* end SQLCA *//* File name & Package Name */
struct sqlcxp
{
  unsigned short fillen;
           char  filnam[76];
};
static const struct sqlcxp sqlfpn =
{
    75,
    "E:\\code\\cust_oracle_handler.c"
};static unsigned int sqlctx = 602293339;/* Object support */
struct sqltvn
{
  unsigned char *tvnvsn;
  unsigned short tvnvsnl;
  unsigned char *tvnnm;
  unsigned short tvnnml;
  unsigned char *tvnsnm;
  unsigned short tvnsnml;
};
typedef struct sqltvn sqltvn;struct sqladts
{
  unsigned int adtvsn;
  unsigned short adtmode;
  unsigned short adtnum;
  sqltvn adttvn[1];
};
typedef struct sqladts sqladts;static struct sqladts sqladt = {
  1,1,0,
};/* Binding to PL/SQL Records */
struct sqltdss
{
  unsigned int tdsvsn;
  unsigned short tdsnum;
  unsigned char *tdsval[1];
};
typedef struct sqltdss sqltdss;
static struct sqltdss sqltds =
{
  1,0,
};static struct sqlexd {
   unsigned int   sqlvsn;
   unsigned int   arrsiz;
   unsigned int   iters;
   unsigned int   offset;
   unsigned short selerr;
   unsigned short sqlety;
   unsigned int   occurs;
      const short *cud;
   unsigned char  *sqlest;
      const char  *stmt;
   sqladts *sqladtp;
   sqltdss *sqltdsp;
            void  **sqphsv;
   unsigned int   *sqphsl;
            int   *sqphss;
            void  **sqpind;
            int   *sqpins;
   unsigned int   *sqparm;
   unsigned int   **sqparc;
   unsigned short  *sqpadto;
   unsigned short  *sqptdso;
   unsigned int   sqlcmax;
   unsigned int   sqlcmin;
   unsigned int   sqlcincr;
   unsigned int   sqlctimeout;
   unsigned int   sqlcnowait;
            int   sqfoff;
   unsigned int   sqcmod;
   unsigned int   sqfmod;
            void  *sqhstv[4];
   unsigned int   sqhstl[4];
            int   sqhsts[4];
            void  *sqindv[4];
            int   sqinds[4];
   unsigned int   sqharm[4];
   unsigned int   *sqharc[4];
   unsigned short  sqadto[4];
   unsigned short  sqtdso[4];
} sqlstm = {12, 4};/* cud (compilation unit data) array */
static const short sqlcud0[] =
{12,4130,852,0,0,
5,0,0,1,0,0,27,53,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,10,0,0,1,10,0,0,
36,0,0,2,0,0,27,55,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,
67,0,0,3,0,0,30,68,0,0,0,0,0,1,0,
82,0,0,4,0,0,29,83,0,0,0,0,0,1,0,
97,0,0,5,66,0,4,87,0,0,2,1,0,1,0,1,97,0,0,2,3,0,0,
120,0,0,6,0,0,29,113,0,0,0,0,0,1,0,
135,0,0,7,0,0,24,117,0,0,1,1,0,1,0,1,97,0,0,
};/* SQLLIB Prototypes */  static int ConnectedDB();  static int CheckSqlResult( char *sMsg );  static int DisConnectDB();
 static int ConnectedDB( )
{
    /* EXEC SQL BEGIN DECLARE SECTION; */
    char sServerName[64] = "", sUserName[64] = "", sPassWord[64] = "";
    struct sqlexd sqlstm;
 //   char *strenv;    /*set ORACLE_HOME env*/     putenv("ORACLE_HOME=/app/oracle/product/10.2.0/db_1");
    /* EXEC SQL END DECLARE SECTION; */
    strcpy(sUserName,"infodba");
    strcpy(sPassWord,"infodba");
    strcpy(sServerName,"pdmdata");    sqlstm.sqlvsn = 12;
    sqlstm.arrsiz = 4;
    sqlstm.sqladtp = &sqladt;
    sqlstm.sqltdsp = &sqltds;
    sqlstm.iters = (unsigned int  )10;
    sqlstm.offset = (unsigned int  )5;
    sqlstm.cud = sqlcud0;
    sqlstm.sqlest = (unsigned char  *)&sqlca;
    sqlstm.sqlety = (unsigned short)256;
    sqlstm.occurs = (unsigned int  )0;
    sqlstm.sqhstv[0] = (         void  *)sUserName;
    sqlstm.sqhstl[0] = (unsigned int  )130;
    sqlstm.sqhsts[0] = (         int  )130;
    sqlstm.sqindv[0] = (         void  *)0;
    sqlstm.sqinds[0] = (         int  )0;
    sqlstm.sqharm[0] = (unsigned int  )0;
    sqlstm.sqadto[0] = (unsigned short )0;
    sqlstm.sqtdso[0] = (unsigned short )0;
    sqlstm.sqhstv[1] = (         void  *)sPassWord;
    sqlstm.sqhstl[1] = (unsigned int  )130;
    sqlstm.sqhsts[1] = (         int  )130;
    sqlstm.sqindv[1] = (         void  *)0;
    sqlstm.sqinds[1] = (         int  )0;
    sqlstm.sqharm[1] = (unsigned int  )0;
    sqlstm.sqadto[1] = (unsigned short )0;
    sqlstm.sqtdso[1] = (unsigned short )0;
    sqlstm.sqhstv[2] = (         void  *)sServerName;
    sqlstm.sqhstl[2] = (unsigned int  )130;
    sqlstm.sqhsts[2] = (         int  )130;
    sqlstm.sqindv[2] = (         void  *)0;
    sqlstm.sqinds[2] = (         int  )0;
    sqlstm.sqharm[2] = (unsigned int  )0;
    sqlstm.sqadto[2] = (unsigned short )0;
    sqlstm.sqtdso[2] = (unsigned short )0;
    sqlstm.sqphsv = sqlstm.sqhstv;
    sqlstm.sqphsl = sqlstm.sqhstl;
    sqlstm.sqphss = sqlstm.sqhsts;
    sqlstm.sqpind = sqlstm.sqindv;
    sqlstm.sqpins = sqlstm.sqinds;
    sqlstm.sqparm = sqlstm.sqharm;
    sqlstm.sqparc = sqlstm.sqharc;
    sqlstm.sqpadto = sqlstm.sqadto;
    sqlstm.sqptdso = sqlstm.sqtdso;
    sqlstm.sqlcmax = (unsigned int )100;
    sqlstm.sqlcmin = (unsigned int )2;
    sqlstm.sqlcincr = (unsigned int )1;
    sqlstm.sqlctimeout = (unsigned int )0;
    sqlstm.sqlcnowait = (unsigned int )0;
    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);    if (CheckSqlResult("Connect Database")!=0)
        return sqlca.sqlcode;    return 0;
} static int CheckSqlResult( char *sMsg)
{
    int i;
    char sTemp[4096];    if (sqlca.sqlcode == 0)
        return 0;
    else if (sqlca.sqlcode > 0)
        return 1;
    else
    {
        printf("err:code:%ld,pos:%s-%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc,sMsg);
    }
    return sqlca.sqlcode;
} extern int access_oracle_DB( char * sMsg )
{
    /* EXEC SQL BEGIN DECLARE SECTION ; */
    int iFlowID = 0 ;
    char dynstmt[8000];
    int iRet = 0;
    /* EXEC SQL END DECLARE SECTION ; */
    iRet = ConnectedDB() ;
    if ( iRet == 0 )
    {      /* EXEC SQL COMMIT WORK ; */    {
        struct sqlexd sqlstm;
        sqlstm.sqlvsn = 12;
        sqlstm.arrsiz = 4;
        sqlstm.sqladtp = &sqladt;
        sqlstm.sqltdsp = &sqltds;
        sqlstm.iters = (unsigned int  )1;
        sqlstm.offset = (unsigned int  )120;
        sqlstm.cud = sqlcud0;
        sqlstm.sqlest = (unsigned char  *)&sqlca;
        sqlstm.sqlety = (unsigned short)256;
        sqlstm.occurs = (unsigned int  )0;
        sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    }
    strcpy(dynstmt,sMsg);    /* EXEC SQL EXECUTE IMMEDIATE :dynstmt; */
    {
        struct sqlexd sqlstm;
        sqlstm.sqlvsn = 12;
        sqlstm.arrsiz = 4;
        sqlstm.sqladtp = &sqladt;
        sqlstm.sqltdsp = &sqltds;
        sqlstm.stmt = "";
        sqlstm.iters = (unsigned int  )1;
        sqlstm.offset = (unsigned int  )135;
        sqlstm.cud = sqlcud0;
        sqlstm.sqlest = (unsigned char  *)&sqlca;
        sqlstm.sqlety = (unsigned short)256;
        sqlstm.occurs = (unsigned int  )0;
        sqlstm.sqhstv[0] = (         void  *)dynstmt;
        sqlstm.sqhstl[0] = (unsigned int  )8000;
        sqlstm.sqhsts[0] = (         int  )0;
        sqlstm.sqindv[0] = (         void  *)0;
        sqlstm.sqinds[0] = (         int  )0;
        sqlstm.sqharm[0] = (unsigned int  )0;
        sqlstm.sqadto[0] = (unsigned short )0;
        sqlstm.sqtdso[0] = (unsigned short )0;
        sqlstm.sqphsv = sqlstm.sqhstv;
        sqlstm.sqphsl = sqlstm.sqhstl;
        sqlstm.sqphss = sqlstm.sqhsts;
        sqlstm.sqpind = sqlstm.sqindv;
        sqlstm.sqpins = sqlstm.sqinds;
        sqlstm.sqparm = sqlstm.sqharm;
        sqlstm.sqparc = sqlstm.sqharc;
        sqlstm.sqpadto = sqlstm.sqadto;
        sqlstm.sqptdso = sqlstm.sqtdso;
        sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    }    iRet = CheckSqlResult( "PutData ");
    if( iRet != 0 )
        return sqlca.sqlcode;    DisConnectDB();
    }
    return iRet ;} static int DisConnectDB()
{
    /* EXEC SQL COMMIT WORK RELEASE ; */    {
        struct sqlexd sqlstm;
        sqlstm.sqlvsn = 12;
        sqlstm.arrsiz = 4;
        sqlstm.sqladtp = &sqladt;
        sqlstm.sqltdsp = &sqltds;
        sqlstm.iters = (unsigned int  )1;
        sqlstm.offset = (unsigned int  )67;
        sqlstm.cud = sqlcud0;
        sqlstm.sqlest = (unsigned char  *)&sqlca;
        sqlstm.sqlety = (unsigned short)256;
        sqlstm.occurs = (unsigned int  )0;
        sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn);
    }
  return 0;
}