AIX系统下proc*数据采集

来源:互联网 发布:python数据处理代码 编辑:程序博客网 时间:2024/06/09 20:59

分享一篇关于AIX系统下采用proc*实现oracle数据采集的例子,采用的技术主要有shell脚本、C++、proc*以及makefile

首先呢看看c++头文件test.h,要注意的是头文件需要引入类库stdlib.h和sqlca.h

[cpp] view plaincopyprint?
  1. #include <stdio.h> 
  2. #include <stdlib.h> 
  3. #include <sqlca.h> 
  4. #include <string.h> 
  5. #include <stdarg.h> 
  6. #include <strings.h> 
  7. #include <time.h>  
  8.  
  9.  
  10.  
  11. /*系统参数*/ 
  12. #define DEFAULT_PRINT_NUM       10000               /*默认打印行数*/ 
  13. #define DEFAULT_INTERVAL_NUM    10000               /*默认每个输出文件纪录条数*/ 
  14. #define DEFAULT_BUF_SIZE        2000                /*默认缓存纪录数*/ 
  15. #define DEFAULT_OUTPUT_LENGTH   3000                /*默认每条纪录长度--------对速度影响较大*/ 
  16. #define DEFAULT_INI_FILE        "param.conf"        /*默认配置文件*/ 
  17. #define DEFAULT_LOG_FILE        "DATATOFILE.log"    /*默认日志文件*/ 
  18. #define DEFAULT_FILE_NUM        1000                /*默认产生文件数*/ 
  19.  
  20. #define DEFAULT_FILEBUFFER_LEN  1024*1024           /*写文件缓冲大小*/ 
  21. #define MAXLINES 10000  
  22.  
  23. FILE* p_fp,* in_fp; 
  24. char c_tmp[200]; 
  25. char c_str[25]; 
  26. char buf[MAXLINES][25];  
  27. char* ps[3]; 
  28. int k = 0,n = 0; 
  29. char* p; 
  30.  
  31.  
  32. /*方法声明*/ 
  33. void getconf(); 
  34. void initparam(); 
  35. void rearparam(); 
  36. void GetValue(char* c_str,char* c_value, char* c_valuename); 
  37. void PrintParam(); 
  38. int ConnectDB(char * u_username); 
  39. void DisconnectDB(); 
  40. void Query(); 
  41. void setparam(int argc,char* argv[]); 
  42. void PRINTF(char msg[]); 
  43. int GetDateTime(char *sDateTime); 
  44. int c = 0; 
  45.  
  46. /*参数构成体*/ 
  47. struct Param 
  48.     char username[200]; 
  49.     char userpass[200]; 
  50.     char database[200]; 
  51.     char USER_PASSWORD[200]; 
  52.     char FILENAME[200]; 
  53.     char c_SqlStr[3000]; 
  54.     char POSTFIX[200]; 
  55. }param; 
  56.  
  57. char* pd[] = 
  58.     "[USER_NAME]", "[USER_PASSWD]","[DATABASE]", "[USER_PASSWORD],[FILENAME],[SQL]" 
  59. }; 
  60.  
  61.  
  62. /***************参数初始化***********************/ 
  63. void initparam() 
  64.     memset( param.username, 0, sizeof( param.username) ) ; 
  65.     memset( param.userpass, 0, sizeof( param.userpass) ) ; 
  66.     memset( param.database, 0, sizeof( param.database) ) ; 
  67.     memset( param.FILENAME, 0, sizeof( param.FILENAME) ) ; 
  68.      
  69.     } 
  70. /***************参数处理*************************/ 
  71. void setparam(int argc,char* argv[]) 
  72.      
  73.     char c_str[50000]; 
  74.     if ((p_fp = fopen(argv[2], "r")) == NULL) 
  75.         printf("打开配置文件%s失败!\n", argv[2]); 
  76.     else 
  77.     { 
  78.         if (strcmp(argv[1], "-f") == 0) 
  79.         { 
  80.             /*while (1)
  81.                     {
  82.                         if (fgets(c_str, 25, p_fp) == NULL)
  83.                             break;
  84.                         strcpy(buf[n], c_str);
  85.                         p = strstr(buf[n], ":");
  86.                         my_Map.insert(make_pair<string, char*>(pd[k], p));
  87.                         k++;
  88.                         n++;
  89.                         if (n >= MAXLINES)
  90.                         {
  91.                             printf(">%d lines ignored.\n", MAXLINES);
  92.                             break;
  93.                         }
  94.                     }*/ 
  95.         } 
  96.         else if (strcmp(argv[1],"-d") == 0)   //输入参数不同 
  97.         { 
  98.             while (1) 
  99.             { 
  100.                 if (fgets(c_str, sizeof(c_str), p_fp) == NULL) 
  101.                     break
  102.                 if (c_str[0] != '[' || strstr(c_str, ":") == NULL) 
  103.                     continue;     
  104.                 if (strstr(c_str, "[USER_NAME]") != NULL) 
  105.                 { 
  106.                     GetValue(c_str, param.username, "[USER_NAME]"); 
  107.                     continue
  108.                 } 
  109.  
  110.                 /**DB**/ 
  111.  
  112.                 if (strstr(c_str, "[USER_PASSWD]") != NULL) 
  113.                 { 
  114.                     GetValue(c_str, param.userpass, "[USER_PASSWD]"); 
  115.                     continue
  116.                 } 
  117.  
  118.                 if (strstr(c_str, "[DATABASE]") != NULL) 
  119.                 { 
  120.                     GetValue(c_str, param.database, "[DATABASE]") ; 
  121.                     continue
  122.                 } 
  123.                 if (strstr(c_str,"[USER_PASSWORD]") != NULL) 
  124.                 { 
  125.                     GetValue(c_str, param.USER_PASSWORD, "[USER_PASSWORD]") ; 
  126.                     continue
  127.                 } 
  128.                 if (strstr(c_str, "[FILENAME]") != NULL) 
  129.                 { 
  130.                     GetValue(c_str, param.FILENAME, "[FILENAME]") ; 
  131.                     continue
  132.                 } 
  133.                 if (strstr(c_str,"[SQL]") != NULL) 
  134.                 { 
  135.                     GetValue(c_str, param.c_SqlStr, "[SQL]") ; 
  136.                     continue
  137.                 } 
  138.                 if (strstr(c_str, "[POSTFIX]") != NULL) 
  139.                 { 
  140.                     GetValue(c_str, param.POSTFIX, "[POSTFIX]") ; 
  141.                     continue
  142.                 } 
  143.             } 
  144.         } 
  145.     } 
  146. /**********************输出配置信息**************************/ 
  147. void PrintParam() 
  148.     printf("**********************************参数信息如下:**********************************\n"); 
  149.     printf("[SYS]\n");  
  150.     printf("[USER_NAME]:%s\n", param.username); 
  151.     printf("[USER_PASSWD]:%s\n", param.userpass);  
  152.     printf("[DATABASE]:%s\n", param.database); 
  153.     printf("[USER_PASS_BASE]:%s\n", param.USER_PASSWORD); 
  154.     printf("[FILENAME]:%s\n", param.FILENAME); 
  155.     printf("[POSTFIX]:%s\n", param.POSTFIX); 
  156.     /*printf("[SQL]:%s\n", param.c_SqlStr);*/ 
  157.     printf("*********************************************************************************\n"); 
  158.  
  159. /**********************读取配置文件**************************/ 
  160. void GetValue(char* c_str,char* c_value, char* c_valuename) 
  161.     char* s = NULL; 
  162.  
  163.     if ((s = strchr(c_str,':')) == NULL) 
  164.     { 
  165.         printf("读取参数%s失败!\n", c_valuename); 
  166.         exit(-1); 
  167.     } 
  168.  
  169.     strcpy(c_value, s + 1); 
  170.     if (c_value[strlen(c_value) - 1] =='\n'
  171.         c_value[strlen(c_value) - 1] = '\0'
  172. void PRINTF(char  msg[]) 
  173.      
  174.     printf("%s\n",msg); 
  175.  
  176. int GetDateTime(char *sDateTime) 
  177.     char    achar_date_time[32]; 
  178.     struct tm   * s_tm_time; 
  179.     time_t  timer; 
  180.  
  181.     memset(achar_date_time,0,sizeof(achar_date_time)); 
  182.      
  183.     time(&timer); 
  184.     s_tm_time=(struct tm *)localtime(&timer); 
  185.     strftime(achar_date_time,sizeof(achar_date_time),"%Y-%m-%d %H:%M:%S",s_tm_time); 
  186.      
  187.     strcpy(sDateTime,achar_date_time); 
  188.      
  189.     return strlen(sDateTime); 

然后是test.cpp文件,引入test.h头文件

[cpp] view plaincopyprint?
  1. /* Result Sets Interface */ 
  2. #ifndef SQL_CRSR 
  3. #  define SQL_CRSR 
  4.   struct sql_cursor 
  5.   { 
  6.     unsigned int curocn; 
  7.     void *ptr1; 
  8.     void *ptr2; 
  9.     unsigned int magic; 
  10.   }; 
  11.   typedef struct sql_cursor sql_cursor; 
  12.   typedef struct sql_cursor SQL_CURSOR; 
  13. #endif /* SQL_CRSR */ 
  14.  
  15. /* Thread Safety */ 
  16. typedef void * sql_context; 
  17. typedef void * SQL_CONTEXT; 
  18.  
  19. /* Object support */ 
  20. struct sqltvn 
  21.   unsigned char *tvnvsn;  
  22.   unsigned short tvnvsnl;  
  23.   unsigned char *tvnnm; 
  24.   unsigned short tvnnml;  
  25.   unsigned char *tvnsnm; 
  26.   unsigned short tvnsnml; 
  27. }; 
  28. typedef struct sqltvn sqltvn; 
  29.  
  30. struct sqladts 
  31.   unsigned int adtvsn;  
  32.   unsigned short adtmode;  
  33.   unsigned short adtnum;   
  34.   sqltvn adttvn[1];        
  35. }; 
  36. typedef struct sqladts sqladts; 
  37.  
  38. static struct sqladts sqladt = { 
  39.   1,1,0, 
  40. }; 
  41.  
  42. /* Binding to PL/SQL Records */ 
  43. struct sqltdss 
  44.   unsigned int tdsvsn;  
  45.   unsigned short tdsnum;  
  46.   unsigned char *tdsval[1];  
  47. }; 
  48. typedef struct sqltdss sqltdss; 
  49. static struct sqltdss sqltds = 
  50.   1, 
  51.   0, 
  52. }; 
  53.  
  54. /* File name & Package Name */ 
  55. struct sqlcxp 
  56.   unsigned short fillen; 
  57.            char  filnam[8]; 
  58. }; 
  59. static conststruct sqlcxp sqlfpn = 
  60.     7, 
  61.     "test.pc" 
  62. }; 
  63.  
  64.  
  65. static unsigned int sqlctx = 9995; 
  66.  
  67.  
  68. static struct sqlexd { 
  69.    unsigned long  sqlvsn; 
  70.    unsigned int   arrsiz; 
  71.    unsigned int   iters; 
  72.    unsigned int   offset; 
  73.    unsigned short selerr; 
  74.    unsigned short sqlety; 
  75.    unsigned int   occurs; 
  76.       const short *cud; 
  77.    unsigned char  *sqlest; 
  78.       const char  *stmt; 
  79.    sqladts *sqladtp; 
  80.    sqltdss *sqltdsp; 
  81.    unsigned char  **sqphsv; 
  82.    unsigned long  *sqphsl; 
  83.             int   *sqphss; 
  84.             short **sqpind; 
  85.             int   *sqpins; 
  86.    unsigned long  *sqparm; 
  87.    unsigned long  **sqparc; 
  88.    unsigned short  *sqpadto; 
  89.    unsigned short  *sqptdso; 
  90.    unsigned int   sqlcmax; 
  91.    unsigned int   sqlcmin; 
  92.    unsigned int   sqlcincr; 
  93.    unsigned int   sqlctimeout; 
  94.    unsigned int   sqlcnowait; 
  95.             int   sqfoff; 
  96.    unsigned int   sqcmod; 
  97.    unsigned int   sqfmod; 
  98.    unsigned char  *sqhstv[4]; 
  99.    unsigned long  sqhstl[4]; 
  100.             int   sqhsts[4]; 
  101.             short *sqindv[4]; 
  102.             int   sqinds[4]; 
  103.    unsigned long  sqharm[4]; 
  104.    unsigned long  *sqharc[4]; 
  105.    unsigned short  sqadto[4]; 
  106.    unsigned short  sqtdso[4]; 
  107. } sqlstm = {12,4}; 
  108.  
  109. // Prototypes 
  110. extern "C"
  111.   void sqlcxt (void **, unsignedint *, 
  112.                struct sqlexd *, const struct sqlcxp *); 
  113.   void sqlcx2t(void **, unsignedint *, 
  114.                struct sqlexd *, const struct sqlcxp *); 
  115.   void sqlbuft(void **,char *); 
  116.   void sqlgs2t(void **,char *); 
  117.   void sqlorat(void **, unsignedint *, void *); 
  118.  
  119. // Forms Interface 
  120. static constint IAPSUCC = 0; 
  121. static constint IAPFAIL = 1403; 
  122. static constint IAPFTL  = 535; 
  123. extern "C" {void sqliem(char *,int *); } 
  124.  
  125. typedef struct { unsignedshort len; unsigned char arr[1]; } VARCHAR; 
  126. typedef struct { unsignedshort len; unsigned char arr[1]; } varchar; 
  127.  
  128. /* cud (compilation unit data) array */ 
  129. static constshort sqlcud0[] = 
  130. {12,4130,852,0,0, 
  131. 5,0,0,1,0,0,283,21,0,0,4,4,0,1,0,1,9,0,0,1,10,0,0,1,10,0,0,1,10,0,0, 
  132. 36,0,0,2,0,0,288,35,0,0,0,0,0,1,0, 
  133. 51,0,0,3,51,0,260,60,0,0,1,0,0,1,0,2,9,0,0, 
  134. 70,0,0,4,0,0,273,84,0,0,1,1,0,1,0,1,9,0,0, 
  135. 89,0,0,4,0,0,301,90,0,0,0,0,0,1,0, 
  136. 104,0,0,4,0,0,269,95,0,0,1,0,0,1,0,2,9,0,0, 
  137. 123,0,0,4,0,0,271,112,0,0,0,0,0,1,0, 
  138. 138,0,0,5,0,0,286,113,0,0,0,0,0,1,0, 
  139. }; 
  140.  
  141.  
  142.  
  143. #include "test.h" 
  144.  
  145. int main(int argc,char* argv[]) 
  146.     initparam(); 
  147.     setparam(argc, argv); 
  148.     PrintParam(); 
  149.     Query(); 
  150.     return 0; 
  151. int ConnectDB(char* c_UserPasswd) 
  152. /*  EXEC SQL INCLUDE SQLCA;
  153. */  
  154. /*
  155. * $Header: sqlca.h 24-apr-2003.12:50:58 mkandarp Exp $ sqlca.h
  156. */ 
  157.  
  158. /* Copyright (c) 1985, 2003, Oracle Corporation.  All rights reserved.  */ 
  159.   
  160. /*
  161. NAME
  162.   SQLCA : SQL Communications Area.
  163. FUNCTION
  164.   Contains no code. Oracle fills in the SQLCA with status info
  165.   during the execution of a SQL stmt.
  166. NOTES
  167.   **************************************************************
  168.   ***                                                        ***
  169.   *** This file is SOSD.  Porters must change the data types ***
  170.   *** appropriately on their platform.  See notes/pcport.doc ***
  171.   *** for more information.                                  ***
  172.   ***                                                        ***
  173.   **************************************************************
  174.   If the symbol SQLCA_STORAGE_CLASS is defined, then the SQLCA
  175.   will be defined to have this storage class. For example:
  176.     #define SQLCA_STORAGE_CLASS extern
  177.   will define the SQLCA as an extern.
  178.   If the symbol SQLCA_INIT is defined, then the SQLCA will be
  179.   statically initialized. Although this is not necessary in order
  180.   to use the SQLCA, it is a good pgming practice not to have
  181.   unitialized variables. However, some C compilers/OS's don't
  182.   allow automatic variables to be init'd in this manner. Therefore,
  183.   if you are INCLUDE'ing the SQLCA in a place where it would be
  184.   an automatic AND your C compiler/OS doesn't allow this style
  185.   of initialization, then SQLCA_INIT should be left undefined --
  186.   all others can define SQLCA_INIT if they wish.
  187.   If the symbol SQLCA_NONE is defined, then the SQLCA variable will
  188.   not be defined at all.  The symbol SQLCA_NONE should not be defined
  189.   in source modules that have embedded SQL.  However, source modules
  190.   that have no embedded SQL, but need to manipulate a sqlca struct
  191.   passed in as a parameter, can set the SQLCA_NONE symbol to avoid
  192.   creation of an extraneous sqlca variable.
  193. MODIFIED
  194.     lvbcheng   07/31/98 -  long to int
  195.     jbasu      12/12/94 -  Bug 217878: note this is an SOSD file
  196.     losborne   08/11/92 -  No sqlca var if SQLCA_NONE macro set
  197.   Clare      12/06/84 - Ch SQLCA to not be an extern.
  198.   Clare      10/21/85 - Add initialization.
  199.   Bradbury   01/05/86 - Only initialize when SQLCA_INIT set
  200.   Clare      06/12/86 - Add SQLCA_STORAGE_CLASS option.
  201. */ 
  202.   
  203. #ifndef SQLCA 
  204. #define SQLCA 1 
  205.   
  206. struct   sqlca 
  207.          { 
  208.          /* ub1 */ char    sqlcaid[8]; 
  209.          /* b4  */ int     sqlabc; 
  210.          /* b4  */ int     sqlcode; 
  211.          struct 
  212.            { 
  213.            /* ub2 */ unsignedshort sqlerrml; 
  214.            /* ub1 */ char           sqlerrmc[70]; 
  215.            } sqlerrm; 
  216.          /* ub1 */ char    sqlerrp[8]; 
  217.          /* b4  */ int     sqlerrd[6]; 
  218.          /* ub1 */ char    sqlwarn[8]; 
  219.          /* ub1 */ char    sqlext[8]; 
  220.          }; 
  221.  
  222. #ifndef SQLCA_NONE  
  223. #ifdef   SQLCA_STORAGE_CLASS 
  224. SQLCA_STORAGE_CLASS struct sqlca sqlca 
  225. #else 
  226.          struct sqlca sqlca 
  227. #endif 
  228.   
  229. #ifdef  SQLCA_INIT 
  230.          = { 
  231.          {'S', 'Q','L', 'C','A', ' ',' ', ' '}, 
  232.          sizeof(struct sqlca), 
  233.          0, 
  234.          { 0, {0}}, 
  235.          {'N', 'O','T', ' ','S', 'E','T', ' '}, 
  236.          {0, 0, 0, 0, 0, 0}, 
  237.          {0, 0, 0, 0, 0, 0, 0, 0}, 
  238.          {0, 0, 0, 0, 0, 0, 0, 0} 
  239.          } 
  240. #endif 
  241.          ; 
  242. #endif 
  243.   
  244. #endif 
  245.   
  246. /* end SQLCA */ 
  247.  
  248.     /* EXEC SQL BEGIN DECLARE SECTION; */  
  249.  
  250.     /* VARCHAR UserPasswd[200]; */  
  251. struct { unsigned short len; unsigned char arr[200]; } UserPasswd; 
  252.  
  253.     /* EXEC SQL END DECLARE SECTION; */  
  254.  
  255.     strcpy((char*)UserPasswd.arr, c_UserPasswd); 
  256.     UserPasswd.len = strlen((char*)UserPasswd.arr); 
  257.  
  258.     /* EXEC SQL connect : UserPasswd; */  
  259.  
  260. struct sqlexd sqlstm; 
  261. sqlstm.sqlvsn = 12; 
  262. sqlstm.arrsiz = 4; 
  263. sqlstm.sqladtp = &sqladt; 
  264. sqlstm.sqltdsp = &sqltds; 
  265. sqlstm.iters = (unsigned int  )10; 
  266. sqlstm.offset = (unsigned int  )5; 
  267. sqlstm.cud = sqlcud0; 
  268. sqlstm.sqlest = (unsigned char  *)&sqlca; 
  269. sqlstm.sqlety = (unsigned short)256; 
  270. sqlstm.occurs = (unsigned int  )0; 
  271. sqlstm.sqhstv[0] = (unsigned char  *)&UserPasswd; 
  272. sqlstm.sqhstl[0] = (unsigned long )202; 
  273. sqlstm.sqhsts[0] = (         int  )202; 
  274. sqlstm.sqindv[0] = (         short *)0; 
  275. sqlstm.sqinds[0] = (         int  )0; 
  276. sqlstm.sqharm[0] = (unsigned long )0; 
  277. sqlstm.sqadto[0] = (unsigned short )0; 
  278. sqlstm.sqtdso[0] = (unsigned short )0; 
  279. sqlstm.sqphsv = sqlstm.sqhstv; 
  280. sqlstm.sqphsl = sqlstm.sqhstl; 
  281. sqlstm.sqphss = sqlstm.sqhsts; 
  282. sqlstm.sqpind = sqlstm.sqindv; 
  283. sqlstm.sqpins = sqlstm.sqinds; 
  284. sqlstm.sqparm = sqlstm.sqharm; 
  285. sqlstm.sqparc = sqlstm.sqharc; 
  286. sqlstm.sqpadto = sqlstm.sqadto; 
  287. sqlstm.sqptdso = sqlstm.sqtdso; 
  288. sqlstm.sqlcmax = (unsigned int )100; 
  289. sqlstm.sqlcmin = (unsigned int )2; 
  290. sqlstm.sqlcincr = (unsigned int )1; 
  291. sqlstm.sqlctimeout = (unsigned int )0; 
  292. sqlstm.sqlcnowait = (unsigned int )0; 
  293. sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  294.  
  295.  
  296.     if (sqlca.sqlcode != 0) 
  297.     { 
  298.         printf("连接数据库失败,错误代码:%ld\n", sqlca.sqlcode); 
  299.     } 
  300.     else 
  301.     { 
  302.         printf("连接数据库成功:%ld\n", sqlca.sqlcode); 
  303.     } 
  304.     return sqlca.sqlcode; 
  305.  
  306. void DisconnectDB() 
  307.     /* EXEC SQL ROLLBACK WORK RELEASE; */  
  308.  
  309. struct sqlexd sqlstm; 
  310. sqlstm.sqlvsn = 12; 
  311. sqlstm.arrsiz = 4; 
  312. sqlstm.sqladtp = &sqladt; 
  313. sqlstm.sqltdsp = &sqltds; 
  314. sqlstm.iters = (unsigned int  )1; 
  315. sqlstm.offset = (unsigned int  )36; 
  316. sqlstm.cud = sqlcud0; 
  317. sqlstm.sqlest = (unsigned char  *)&sqlca; 
  318. sqlstm.sqlety = (unsigned short)256; 
  319. sqlstm.occurs = (unsigned int  )0; 
  320. sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  321.  
  322.  
  323.  
  324. void Query() 
  325.     char *datainfo; 
  326.     char c_DateTime[50];    /*输出的时间变量*/ 
  327.     int i = 0; 
  328.     int j=0; 
  329.     GetDateTime(c_DateTime); 
  330.     char msg[DEFAULT_FILEBUFFER_LEN]; 
  331.     char C_SP_TYPE_CODE[DEFAULT_FILEBUFFER_LEN]; 
  332. /*  EXEC SQL INCLUDE SQLCA;
  333. */  
  334. /*
  335. * $Header: sqlca.h 24-apr-2003.12:50:58 mkandarp Exp $ sqlca.h
  336. */ 
  337.  
  338. /* Copyright (c) 1985, 2003, Oracle Corporation.  All rights reserved.  */ 
  339.   
  340. /*
  341. NAME
  342.   SQLCA : SQL Communications Area.
  343. FUNCTION
  344.   Contains no code. Oracle fills in the SQLCA with status info
  345.   during the execution of a SQL stmt.
  346. NOTES
  347.   **************************************************************
  348.   ***                                                        ***
  349.   *** This file is SOSD.  Porters must change the data types ***
  350.   *** appropriately on their platform.  See notes/pcport.doc ***
  351.   *** for more information.                                  ***
  352.   ***                                                        ***
  353.   **************************************************************
  354.   If the symbol SQLCA_STORAGE_CLASS is defined, then the SQLCA
  355.   will be defined to have this storage class. For example:
  356.     #define SQLCA_STORAGE_CLASS extern
  357.   will define the SQLCA as an extern.
  358.   If the symbol SQLCA_INIT is defined, then the SQLCA will be
  359.   statically initialized. Although this is not necessary in order
  360.   to use the SQLCA, it is a good pgming practice not to have
  361.   unitialized variables. However, some C compilers/OS's don't
  362.   allow automatic variables to be init'd in this manner. Therefore,
  363.   if you are INCLUDE'ing the SQLCA in a place where it would be
  364.   an automatic AND your C compiler/OS doesn't allow this style
  365.   of initialization, then SQLCA_INIT should be left undefined --
  366.   all others can define SQLCA_INIT if they wish.
  367.   If the symbol SQLCA_NONE is defined, then the SQLCA variable will
  368.   not be defined at all.  The symbol SQLCA_NONE should not be defined
  369.   in source modules that have embedded SQL.  However, source modules
  370.   that have no embedded SQL, but need to manipulate a sqlca struct
  371.   passed in as a parameter, can set the SQLCA_NONE symbol to avoid
  372.   creation of an extraneous sqlca variable.
  373. MODIFIED
  374.     lvbcheng   07/31/98 -  long to int
  375.     jbasu      12/12/94 -  Bug 217878: note this is an SOSD file
  376.     losborne   08/11/92 -  No sqlca var if SQLCA_NONE macro set
  377.   Clare      12/06/84 - Ch SQLCA to not be an extern.
  378.   Clare      10/21/85 - Add initialization.
  379.   Bradbury   01/05/86 - Only initialize when SQLCA_INIT set
  380.   Clare      06/12/86 - Add SQLCA_STORAGE_CLASS option.
  381. */ 
  382.   
  383. #ifndef SQLCA 
  384. #define SQLCA 1 
  385.   
  386. struct   sqlca 
  387.          { 
  388.          /* ub1 */ char    sqlcaid[8]; 
  389.          /* b4  */ int     sqlabc; 
  390.          /* b4  */ int     sqlcode; 
  391.          struct 
  392.            { 
  393.            /* ub2 */ unsignedshort sqlerrml; 
  394.            /* ub1 */ char           sqlerrmc[70]; 
  395.            } sqlerrm; 
  396.          /* ub1 */ char    sqlerrp[8]; 
  397.          /* b4  */ int     sqlerrd[6]; 
  398.          /* ub1 */ char    sqlwarn[8]; 
  399.          /* ub1 */ char    sqlext[8]; 
  400.          }; 
  401.  
  402. #ifndef SQLCA_NONE  
  403. #ifdef   SQLCA_STORAGE_CLASS 
  404. SQLCA_STORAGE_CLASS struct sqlca sqlca 
  405. #else 
  406.          struct sqlca sqlca 
  407. #endif 
  408.   
  409. #ifdef  SQLCA_INIT 
  410.          = { 
  411.          {'S', 'Q','L', 'C','A', ' ',' ', ' '}, 
  412.          sizeof(struct sqlca), 
  413.          0, 
  414.          { 0, {0}}, 
  415.          {'N', 'O','T', ' ','S', 'E','T', ' '}, 
  416.          {0, 0, 0, 0, 0, 0}, 
  417.          {0, 0, 0, 0, 0, 0, 0, 0}, 
  418.          {0, 0, 0, 0, 0, 0, 0, 0} 
  419.          } 
  420. #endif 
  421.          ; 
  422. #endif 
  423.   
  424. #endif 
  425.   
  426. /* end SQLCA */ 
  427.  
  428.     /* EXEC SQL BEGIN DECLARE SECTION; */  
  429.  
  430.     /* VARCHAR count[20]; */  
  431. struct { unsigned short len; unsigned char arr[20]; } count; 
  432.  
  433.     /* VARCHAR  SqlStr[5000]; */  
  434. struct { unsigned short len; unsignedchar arr[5000]; } SqlStr; 
  435.  
  436.      
  437.     /* VARCHAR SP_TYPE[20]; */  
  438. struct { unsigned short len; unsignedchar arr[20]; } SP_TYPE; 
  439.  
  440.     /* VARCHAR  SP_TYPE_CODE[DEFAULT_FILEBUFFER_LEN]; */  
  441. struct { unsigned short len; unsigned char arr[1048576]; } SP_TYPE_CODE; 
  442.  
  443.     /* EXEC SQL END DECLARE SECTION; */  
  444.  
  445.     strcpy ((char *)SqlStr.arr,param.c_SqlStr); 
  446.     SqlStr.len = strlen((char*)SqlStr.arr); 
  447.  
  448.     if (ConnectDB(param.USER_PASSWORD) == 0) 
  449.     { 
  450.         /* EXEC SQL SELECT count(*) INTO :count FROM TD_B_PARTY_SERVICE; */  
  451.  
  452.   struct sqlexd sqlstm; 
  453.   sqlstm.sqlvsn = 12; 
  454.   sqlstm.arrsiz = 4; 
  455.   sqlstm.sqladtp = &sqladt; 
  456.   sqlstm.sqltdsp = &sqltds; 
  457.   sqlstm.stmt = "select count(*)  into :b0  from TD_B_PARTY_SERVICE "
  458.   sqlstm.iters = (unsigned int  )1; 
  459.   sqlstm.offset = (unsigned int  )51; 
  460.   sqlstm.selerr = (unsigned short)1; 
  461.   sqlstm.cud = sqlcud0; 
  462.   sqlstm.sqlest = (unsigned char  *)&sqlca; 
  463.   sqlstm.sqlety = (unsigned short)256; 
  464.   sqlstm.occurs = (unsigned int  )0; 
  465.   sqlstm.sqhstv[0] = (unsigned char  *)&count; 
  466.   sqlstm.sqhstl[0] = (unsigned long )22; 
  467.   sqlstm.sqhsts[0] = (         int  )0; 
  468.   sqlstm.sqindv[0] = (         short *)0; 
  469.   sqlstm.sqinds[0] = (         int  )0; 
  470.   sqlstm.sqharm[0] = (unsigned long )0; 
  471.   sqlstm.sqadto[0] = (unsigned short )0; 
  472.   sqlstm.sqtdso[0] = (unsigned short )0; 
  473.   sqlstm.sqphsv = sqlstm.sqhstv; 
  474.   sqlstm.sqphsl = sqlstm.sqhstl; 
  475.   sqlstm.sqphss = sqlstm.sqhsts; 
  476.   sqlstm.sqpind = sqlstm.sqindv; 
  477.   sqlstm.sqpins = sqlstm.sqinds; 
  478.   sqlstm.sqparm = sqlstm.sqharm; 
  479.   sqlstm.sqparc = sqlstm.sqharc; 
  480.   sqlstm.sqpadto = sqlstm.sqadto; 
  481.   sqlstm.sqptdso = sqlstm.sqtdso; 
  482.   sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  483.  
  484.  
  485.         if (sqlca.sqlcode < 0) 
  486.         { 
  487.             DisconnectDB(); /*断开数据库连接*/ 
  488.  
  489.             printf("建立游标错误!错误代码:%d\n", sqlca.sqlcode); 
  490.             exit(-1); 
  491.         } 
  492.         strcpy((char*)msg, (char*)count.arr); 
  493.      
  494.          
  495.         if ((in_fp = fopen(param.FILENAME,"w")) != NULL) 
  496.         { 
  497.             printf("打开%s文件成功\n\n", param.FILENAME);  
  498.             printf("---------------------%s 开始处理数据---------------------\n\n", c_DateTime); 
  499.             printf("[SQL]:%s\n\n", param.c_SqlStr); 
  500.             /*if (setvbuf(in_fp, msg, _IONBF, DEFAULT_FILEBUFFER_LEN) != 0)
  501.                 printf("设置缓冲失败\n");
  502.             else
  503.             {
  504.                 printf("设置缓冲成功:%d\n", setvbuf(in_fp, msg, _IONBF, DEFAULT_FILEBUFFER_LEN));
  505.             }
  506.             */ 
  507.             /* prepare */ 
  508.             /* EXEC SQL PREPARE s FROM :SqlStr; */  
  509.  
  510.    struct sqlexd sqlstm; 
  511.    sqlstm.sqlvsn = 12; 
  512.    sqlstm.arrsiz = 4; 
  513.    sqlstm.sqladtp = &sqladt; 
  514.    sqlstm.sqltdsp = &sqltds; 
  515.    sqlstm.stmt = ""
  516.    sqlstm.iters = (unsigned int  )1; 
  517.    sqlstm.offset = (unsigned int  )70; 
  518.    sqlstm.cud = sqlcud0; 
  519.    sqlstm.sqlest = (unsigned char  *)&sqlca; 
  520.    sqlstm.sqlety = (unsigned short)256; 
  521.    sqlstm.occurs = (unsigned int  )0; 
  522.    sqlstm.sqhstv[0] = (unsigned char  *)&SqlStr; 
  523.    sqlstm.sqhstl[0] = (unsigned long )5002; 
  524.    sqlstm.sqhsts[0] = (         int  )0; 
  525.    sqlstm.sqindv[0] = (         short *)0; 
  526.    sqlstm.sqinds[0] = (         int  )0; 
  527.    sqlstm.sqharm[0] = (unsigned long )0; 
  528.    sqlstm.sqadto[0] = (unsigned short )0; 
  529.    sqlstm.sqtdso[0] = (unsigned short )0; 
  530.    sqlstm.sqphsv = sqlstm.sqhstv; 
  531.    sqlstm.sqphsl = sqlstm.sqhstl; 
  532.    sqlstm.sqphss = sqlstm.sqhsts; 
  533.    sqlstm.sqpind = sqlstm.sqindv; 
  534.    sqlstm.sqpins = sqlstm.sqinds; 
  535.    sqlstm.sqparm = sqlstm.sqharm; 
  536.    sqlstm.sqparc = sqlstm.sqharc; 
  537.    sqlstm.sqpadto = sqlstm.sqadto; 
  538.    sqlstm.sqptdso = sqlstm.sqtdso; 
  539.    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  540.  
  541.   
  542.              
  543.             /*声明一个跟该动态语句相关的游标*/ 
  544.             /* EXEC SQL DECLARE cur_out CURSOR FOR s; */  
  545.  
  546.              
  547.             /*通过OPEN操作向动态语句传递参数*/ 
  548.             /* EXEC SQL OPEN cur_out; */  
  549.  
  550.    struct sqlexd sqlstm; 
  551.    sqlstm.sqlvsn = 12; 
  552.    sqlstm.arrsiz = 4; 
  553.    sqlstm.sqladtp = &sqladt; 
  554.    sqlstm.sqltdsp = &sqltds; 
  555.    sqlstm.stmt = ""
  556.    sqlstm.iters = (unsigned int  )1; 
  557.    sqlstm.offset = (unsigned int  )89; 
  558.    sqlstm.selerr = (unsigned short)1; 
  559.    sqlstm.cud = sqlcud0; 
  560.    sqlstm.sqlest = (unsigned char  *)&sqlca; 
  561.    sqlstm.sqlety = (unsigned short)256; 
  562.    sqlstm.occurs = (unsigned int  )0; 
  563.    sqlstm.sqcmod = (unsigned int )0; 
  564.    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  565.  
  566.  
  567.              
  568.             /* EXEC SQL WHENEVER NOT FOUND GOTO notfound; */  
  569.  
  570.         while(TRUE)  
  571.             { 
  572.                 /* EXEC SQL FETCH cur_out into :SP_TYPE_CODE; */  
  573.  
  574.     struct sqlexd sqlstm; 
  575.     sqlstm.sqlvsn = 12; 
  576.     sqlstm.arrsiz = 4; 
  577.     sqlstm.sqladtp = &sqladt; 
  578.     sqlstm.sqltdsp = &sqltds; 
  579.     sqlstm.iters = (unsigned int  )1; 
  580.     sqlstm.offset = (unsigned int  )104; 
  581.     sqlstm.selerr = (unsigned short)1; 
  582.     sqlstm.cud = sqlcud0; 
  583.     sqlstm.sqlest = (unsigned char  *)&sqlca; 
  584.     sqlstm.sqlety = (unsigned short)256; 
  585.     sqlstm.occurs = (unsigned int  )0; 
  586.     sqlstm.sqfoff = (         int )0; 
  587.     sqlstm.sqfmod = (unsigned int )2; 
  588.     sqlstm.sqhstv[0] = (unsigned char  *)&SP_TYPE_CODE; 
  589.     sqlstm.sqhstl[0] = (unsigned long )1048578; 
  590.     sqlstm.sqhsts[0] = (         int  )0; 
  591.     sqlstm.sqindv[0] = (         short *)0; 
  592.     sqlstm.sqinds[0] = (         int  )0; 
  593.     sqlstm.sqharm[0] = (unsigned long )0; 
  594.     sqlstm.sqadto[0] = (unsigned short )0; 
  595.     sqlstm.sqtdso[0] = (unsigned short )0; 
  596.     sqlstm.sqphsv = sqlstm.sqhstv; 
  597.     sqlstm.sqphsl = sqlstm.sqhstl; 
  598.     sqlstm.sqphss = sqlstm.sqhsts; 
  599.     sqlstm.sqpind = sqlstm.sqindv; 
  600.     sqlstm.sqpins = sqlstm.sqinds; 
  601.     sqlstm.sqparm = sqlstm.sqharm; 
  602.     sqlstm.sqparc = sqlstm.sqharc; 
  603.     sqlstm.sqpadto = sqlstm.sqadto; 
  604.     sqlstm.sqptdso = sqlstm.sqtdso; 
  605.     sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  606.     if (sqlca.sqlcode == 1403)goto notfound; 
  607.  
  608.  
  609.                 if (sqlca.sqlcode < 0) 
  610.                 { 
  611.                     DisconnectDB(); /*断开数据库连接*/ 
  612.  
  613.                     printf("建立游标错误!错误代码:%d\n", sqlca.sqlcode); 
  614.                     exit(-1); 
  615.                 } 
  616.                 strcpy((char*)C_SP_TYPE_CODE, (char*)SP_TYPE_CODE.arr); 
  617.                 fputs(C_SP_TYPE_CODE, in_fp); 
  618.                 fputc('\n', in_fp); 
  619.                 i++; 
  620.                 if (i%1000==0) 
  621.                     printf(" 输出[%d]条记录\n",i); 
  622.              
  623.             } 
  624.             notfound: 
  625.             /* EXEC SQL CLOSE cur_out; */  
  626.  
  627.    struct sqlexd sqlstm; 
  628.    sqlstm.sqlvsn = 12; 
  629.    sqlstm.arrsiz = 4; 
  630.    sqlstm.sqladtp = &sqladt; 
  631.    sqlstm.sqltdsp = &sqltds; 
  632.    sqlstm.iters = (unsigned int  )1; 
  633.    sqlstm.offset = (unsigned int  )123; 
  634.    sqlstm.cud = sqlcud0; 
  635.    sqlstm.sqlest = (unsigned char  *)&sqlca; 
  636.    sqlstm.sqlety = (unsigned short)256; 
  637.    sqlstm.occurs = (unsigned int  )0; 
  638.    sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  639.  
  640.  
  641.         /* EXEC SQL COMMIT RELEASE; */  
  642.  
  643.       struct sqlexd sqlstm; 
  644.       sqlstm.sqlvsn = 12; 
  645.       sqlstm.arrsiz = 4; 
  646.       sqlstm.sqladtp = &sqladt; 
  647.       sqlstm.sqltdsp = &sqltds; 
  648.       sqlstm.iters = (unsigned int  )1; 
  649.       sqlstm.offset = (unsigned int  )138; 
  650.       sqlstm.cud = sqlcud0; 
  651.       sqlstm.sqlest = (unsigned char  *)&sqlca; 
  652.       sqlstm.sqlety = (unsigned short)256; 
  653.       sqlstm.occurs = (unsigned int  )0; 
  654.       sqlcxt((void **)0, &sqlctx, &sqlstm, &sqlfpn); 
  655.  
  656.  
  657.         printf("-------------关闭文件%s成功!-------------\n",param.FILENAME); 
  658.             printf("--------------------------共处理%d条数据---------------------------\n\n", i); 
  659.             fclose(in_fp); 
  660.             exit(0); 
  661.         } 
  662.     } 

再就是pc文件test.pc,其需要引入test.h文件,主要是调用test.h方法

[cpp] view plaincopyprint?
  1. #include "test.h" 
  2.  
  3. int main(int argc,char* argv[]) 
  4.     initparam(); 
  5.     setparam(argc, argv); 
  6.     PrintParam(); 
  7.     Query(); 
  8.     return 0; 
  9. int ConnectDB(char* c_UserPasswd) 
  10.     EXEC SQL INCLUDE SQLCA; 
  11.     EXEC SQL BEGIN DECLARE SECTION; 
  12.     VARCHAR UserPasswd[200]; 
  13.     EXEC SQL END DECLARE SECTION; 
  14.     strcpy((char*)UserPasswd.arr, c_UserPasswd); 
  15.     UserPasswd.len = strlen((char*)UserPasswd.arr); 
  16.  
  17.     EXEC SQL connect : UserPasswd; 
  18.     if (sqlca.sqlcode != 0) 
  19.     { 
  20.         printf("连接数据库失败,错误代码:%ld\n", sqlca.sqlcode); 
  21.     } 
  22.     else 
  23.     { 
  24.         printf("连接数据库成功:%ld\n", sqlca.sqlcode); 
  25.     } 
  26.     return sqlca.sqlcode; 
  27.  
  28. void DisconnectDB() 
  29.     EXEC SQL ROLLBACK WORK RELEASE; 
  30.  
  31. void Query() 
  32.     char *datainfo; 
  33.     char c_DateTime[50];    /*输出的时间变量*/ 
  34.     int i = 0; 
  35.     int j=0; 
  36.     GetDateTime(c_DateTime); 
  37.     char msg[DEFAULT_FILEBUFFER_LEN]; 
  38.     char C_SP_TYPE_CODE[DEFAULT_FILEBUFFER_LEN]; 
  39.     EXEC SQL INCLUDE SQLCA; 
  40.     EXEC SQL BEGIN DECLARE SECTION; 
  41.     VARCHAR count[20]; 
  42.     VARCHAR  SqlStr[5000]; 
  43.      
  44.     VARCHAR SP_TYPE[20]; 
  45.     VARCHAR  SP_TYPE_CODE[DEFAULT_FILEBUFFER_LEN]; 
  46.     EXEC SQL END DECLARE SECTION; 
  47.     strcpy ((char *)SqlStr.arr,param.c_SqlStr); 
  48.     SqlStr.len = strlen((char*)SqlStr.arr); 
  49.  
  50.     if (ConnectDB(param.USER_PASSWORD) == 0) 
  51.     { 
  52.         EXEC SQL SELECT count(*) INTO :count FROM TD_B_PARTY_SERVICE; 
  53.         if (sqlca.sqlcode < 0) 
  54.         { 
  55.             DisconnectDB(); /*断开数据库连接*/ 
  56.  
  57.             printf("建立游标错误!错误代码:%d\n", sqlca.sqlcode); 
  58.             exit(-1); 
  59.         } 
  60.         strcpy((char*)msg, (char*)count.arr); 
  61.      
  62.          
  63.         if ((in_fp = fopen(param.FILENAME,"w")) != NULL) 
  64.         { 
  65.             printf("打开%s文件成功\n\n", param.FILENAME);  
  66.             printf("---------------------%s 开始处理数据---------------------\n\n", c_DateTime); 
  67.             printf("[SQL]:%s\n\n", param.c_SqlStr); 
  68.             /*if (setvbuf(in_fp, msg, _IONBF, DEFAULT_FILEBUFFER_LEN) != 0)
  69.                 printf("设置缓冲失败\n");
  70.             else
  71.             {
  72.                 printf("设置缓冲成功:%d\n", setvbuf(in_fp, msg, _IONBF, DEFAULT_FILEBUFFER_LEN));
  73.             }
  74.             */ 
  75.             /* prepare */ 
  76.             EXEC SQL PREPARE s FROM :SqlStr;  
  77.              
  78.             /*声明一个跟该动态语句相关的游标*/ 
  79.             EXEC SQL DECLARE cur_out CURSOR FOR s; 
  80.              
  81.             /*通过OPEN操作向动态语句传递参数*/ 
  82.             EXEC SQL OPEN cur_out; 
  83.              
  84.             EXEC SQL WHENEVER NOT FOUND GOTO notfound; 
  85.         while(TRUE)  
  86.             { 
  87.                 EXEC SQL FETCH cur_out into :SP_TYPE_CODE; 
  88.                 if (sqlca.sqlcode < 0) 
  89.                 { 
  90.                     DisconnectDB(); /*断开数据库连接*/ 
  91.  
  92.                     printf("建立游标错误!错误代码:%d\n", sqlca.sqlcode); 
  93.                     exit(-1); 
  94.                 } 
  95.                 strcpy((char*)C_SP_TYPE_CODE, (char*)SP_TYPE_CODE.arr); 
  96.                 fputs(C_SP_TYPE_CODE, in_fp); 
  97.                 fputc('\n', in_fp); 
  98.                 i++; 
  99.                 if (i%1000==0) 
  100.                     printf(" 输出[%d]条记录\n",i); 
  101.              
  102.             } 
  103.             notfound: 
  104.             EXEC SQL CLOSE cur_out; 
  105.         EXEC SQL COMMIT RELEASE; 
  106.         printf("-------------关闭文件%s成功!-------------\n",param.FILENAME); 
  107.             printf("--------------------------共处理%d条数据---------------------------\n\n", i); 
  108.             fclose(in_fp); 
  109.             exit(0); 
  110.         } 
  111.     } 

ok,主要的代码就这些,接下来呢就是要编译pro*文件了,这就用到makefile,这里需要注意的就是要引入oracle的lib了,不能少了也不可乱了顺序,否则会有意想不到的错误发生,我的系统是AIX,所以编译采用的是xlc,linux系统可用cpp。编译命令是make proc,生成可执行文件DATATOFILE

Makefile

[cpp] view plaincopyprint?
  1. CPP       = xlC_r7 -q64 -bh:5 -g  
  2. CPPFLAGS    =   -c -o  
  3.  
  4.  
  5. LFLAGS    = $(PLATFORM_DEF) -D_REENTRANT -D_THREAD_SAFE -g -w -o 
  6. LIB       = -L$(PATH_LIB) 
  7. PATH_TEST =/ngbss/mddms/interface/other/SRBI/test 
  8. PROC_INCLUDE =  -I${ORACLE_HOME}/precomp/public 
  9. PROC_LIB =-L${ORACLE_HOME}/lib -L${ORACLE_HOME}/precomp/lib  
  10. OCI_INCLUDE =   -O -I${ORACLE_HOME}/rdbms/include -I${ORACLE_HOME}/rdbms/demo -I${ORACLE_HOME}/rdbms/public -I${ORACLE_HOME}/plsql/public -I${ORACLE_HOME}/network/public  
  11. OCI_LIBPATH = -L. -L.. -L${ORACLE_HOME}/lib  
  12. INCLUDE   = $(OCI_INCLUDE) 
  13.  
  14.  
  15.      
  16. proc: 
  17.     proc SQLCHECK=SEMANTICS  HOLD_CURSOR=YES userid=uop_uif1/123456@ngcrm1_taf code=CPP iname=test.pc oname=test.cpp 
  18.  
  19.  
  20.     xlc  -qdfp -I${ORACLE_HOME}/rdbms/lib32 \ 
  21.             -I${ORACLE_HOME}/lib32 \ 
  22.             -I${ORACLE_HOME}/precomp/public
  23.             -L${ORACLE_HOME}/lib32\ 
  24.             -I${ORACLE_HOME}/precomp/lib \ 
  25.             -L${ORACLE_HOME}/rdbms/lib32 \ 
  26.           -L${ORACLE_HOME}/rdbms/lib -L${ORACLE_HOME}/lib -locci -lclntsh  test.cpp  -o DATATOFILE 
  27.  
  28.      

好了,最后看看我们如何利用shell脚本调用DATATOFILE取出oracle数据的,shell脚本将会生成一个*.ini的配置文件,配置信息呢就是
[cpp] view plaincopyprint?
  1. cat<<EndCfg>$szCfgFile到EndCfg直接的类容,[]就是配置信息标记,${BIN_PATH}/DATATOFILE -d $INI_PATH/filename_${x}.ini这句呢就是调用我们的可执行程序生成数据了 
  2. 然后我们执行sh test.sh运行脚本。生成数据文件*.AVL 

test.sh

[cpp] view plaincopyprint?
  1. #!/bin/sh 
  2. #-------------------------------------------------------------------- 
  3. # Fuction:产品域   TD_B_SPTYPE SP业务类型参数表 
  4. # Version: 1.0 
  5. # Created: wangkun 
  6. # Created date:2012/10/12 
  7. # Modify history: 
  8. #-------------------------------------------------------------------- 
  9.  
  10. begintime=`date +%s` 
  11. . /ngbss/mddms/.profile 
  12. export NLS_LANG="AMERICAN_AMERICA.utf8" 
  13. ###################################################################################### 
  14. SafeCmd() 
  15. $* 
  16. return
  17.  
  18. DEALDATE=`date +%Y%m%d` 
  19. curdate=`date +%Y%m%d` 
  20.  
  21. #得到前一天日期 
  22. GetPrevDate() 
  23.         if (test $# -eq 0) 
  24.         then 
  25.                 CurDate=`date +%Y%m%d` 
  26.         else 
  27.                 CurDate=$1 
  28.         fi 
  29.  
  30.         CurYear=`echo $CurDate | cut -c1-4` 
  31.         CurMonth=`echo $CurDate | cut -c5-6` 
  32.         CurDay=`echo $CurDate | cut -c7-8` 
  33.  
  34.         GetYear="$CurYear" 
  35.         GetMonth="$CurMonth" 
  36.         GetDay="`expr $CurDay - 1`" 
  37.  
  38.         if [ "$GetDay" -le 0 ]; then 
  39.  
  40.             GetMonth=`expr $CurMonth - 1` 
  41.  
  42.             if [ "$GetMonth" -le 0 ] ; then 
  43.  
  44.                     GetYear=`expr $CurYear - 1` 
  45.                     GetMonth=12 
  46.  
  47.             fi 
  48.  
  49.             case "$GetMonth" 
  50.             in 
  51.                 1|3|5|7|8|10|12) 
  52.                       GetDay=31;; 
  53.                 4|6|9|11) 
  54.                       GetDay=30;; 
  55.                 2) 
  56.  
  57.                       if [ `expr "$CurYear" % 400` -eq 0 ]; then 
  58.  
  59.                               GetDay=29 
  60.  
  61.                       elif [ `expr "$CurYear" % 4` -eq 0 -a `expr"$CurYear" % 100` -ne 0 ]; then 
  62.  
  63.                               GetDay=29 
  64.  
  65.                       else 
  66.                               GetDay=28 
  67.                       fi 
  68.             esac 
  69.         fi 
  70.  
  71.         if [ `echo "$GetMonth" | wc -m` -ne 3 ] ; then 
  72.  
  73.                 GetMonth=0$GetMonth 
  74.         fi 
  75.  
  76.         if [ `echo "$GetDay" | wc -m` -ne 3 ] ; then 
  77.  
  78.                 GetDay=0$GetDay 
  79.         fi 
  80.  
  81.         echo  "$GetYear""$GetMonth""$GetDay" 
  82.  
  83. sdate=`GetPrevDate` 
  84.  
  85. #######################公共配置############################################### 
  86. szProcTime=`date +%Y%m%d%H%M%S` 
  87. WORK_PATH=/ngbss/mddms/interface/other/SRBI/test 
  88. LOGPATH=/ngbss/mddms/interface/other/SRBI/log 
  89. FILE_PATH=/ngbss/mddms/interface/other/SRBI/test/files 
  90. CHKSHPATH=/ngbss/mddms/interface/other/SRBI/ddchk.sh 
  91. BAK_PATH=/ngbss/mddms/interface/other/SRBI/test/bak 
  92. BIN_PATH=/ngbss/mddms/interface/other/SRBI/test 
  93. INI_PATH=/ngbss/mddms/interface/other/SRBI/test/ini 
  94. COMMON_PATH=/ngbss/mddms/interface/common/ 
  95. ######################公共配置############################################### 
  96.  
  97.  
  98. cd $COMMON_PATH 
  99. #CONN=`sh /ngbss/mddms/interface/getid/getid.sh BIuop_cen1 uop_cen1` 
  100. CONN1=uop_cen1/123456@NGcrm1-gs 
  101. #CONN2=uop_crm2/123456@ngcrm1_taf 
  102. #割接开启 
  103. cd $WORK_PATH 
  104. CHANNEL="uop_cen1"   
  105.          
  106.          
  107. table_column_name="SP_TYPE_CODE,SP_TYPE" 
  108. table_column_type="VARCHAR2,VARCHAR2" 
  109.  
  110. for x in $CHANNEL 
  111. do 
  112. if [ "$x" = uop_cen1 ] 
  113. then 
  114.   filename='BA087D01001'$sdate'00000001' 
  115.   CONN=$CONN1 
  116. fi 
  117.  
  118. echo ====================================================================================== 
  119.  
  120. echo `date +%H\:%M\'%S\"` 正在处理$filename... 
  121.  
  122. ##############################配置信息############################################# 
  123. szCfgFile=$INI_PATH/filename_${x}.ini 
  124.  
  125. cat<<EndCfg>$szCfgFile 
  126.  
  127. [SYS] 
  128.  
  129. #每条纪录的长度 对速度影响较大 
  130. [SINGLE_LENGTH]:1000 
  131.  
  132. [DB] 
  133.  
  134. [USER_PASSWORD]:$CONN 
  135.  
  136. #可以加入UNION ALL 等语句 decode(a.modify_tag, '0', '1', '1', '2', '1') 
  137. [SQL]: select replace(replace( PARTY_ID||chr(01)||SP_TYPE_CODE||chr(01)||SP_ID||chr(01)||SP_NAME||chr(01)||STATES||chr(01)||START_DATE||chr(01)||END_DATE||chr(01)||UPDATE_TIME ,chr(10)),chr(13)) from TD_B_PARTY_SERVICE    
  138.  
  139. [FILENAME]:${FILE_PATH}/$filename 
  140.  
  141. #文件后缀名 
  142. [POSTFIX]:AVL 
  143.  
  144. [OTHER] 
  145.  
  146. [COMMOND]: ls 
  147. EndCfg 
  148. ##############################配置信息############################################# 
  149. cd $WORK_PATH 
  150. ${BIN_PATH}/DATATOFILE -d $INI_PATH/filename_${x}.ini 
  151. cd $FILE_PATH 
  152. mv $filename ${filename}.AVL 
  153. done 
  154. endtime=`date +%s` 
  155. echo "共计时间:"  $((endtime-begintime))"秒"