home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Product / Product.zip / DBDEMO.ZIP / DEMODB.ZIP / D30ACBB1.SQC < prev    next >
Text File  |  1991-06-03  |  28KB  |  673 lines

  1. /***************************************       ****************/
  2. /*                                                                         */
  3. /*  APPLICATION PROGRAM NAME:  D30ACBB1.SQC of D30ACB01                    */
  4. /*                                                                         */
  5. /*  PROGRAM LANGUAGE: 'C' Language                                         */
  6. /*                                                                         */
  7. /*  PROGRAM DESCRIPTION:  D30ACBB1.SQC is the second program of the        */
  8. /*                        D30ACB01 creation application.                   */
  9. /*                                                                         */
  10. /*                        This program will create the 7 tables of the     */
  11. /*                        BANK data base:                                  */
  12. /*                                                                         */
  13. /*                              Customer                                   */
  14. /*                              Box                                        */
  15. /*                              Checking                                   */
  16. /*                              Credits                                    */
  17. /*                              Debits                                     */
  18. /*                              Loan                                       */
  19. /*                              Savings                                    */
  20. /*                                                                         */
  21. /*                        An additional table will also be created that    */
  22. /*                        will be identical to the Customer table.  This   */
  23. /*                        table will be used with the import through a     */
  24. /*                        view (Replace option) test.  It will be named:   */
  25. /*                                                                         */
  26. /*                              Newcust                                    */
  27. /*                                                                         */
  28. /*  AUTHOR:   D. J. Grant                    DATE: 04/22/87                */
  29. /*                                                                         */
  30. /*  DATABASE:  Gemstone BANK database                                      */
  31. /*                                                                         */
  32. /*  INPUT FILES:  None                                                     */
  33. /*                                                                         */
  34. /*  OUTPUT FILES:                                                          */
  35. /*                                                                         */
  36. /*            D30ACBB1.ERR - this is a file, written to disk, only         */
  37. /*            when some type of error condition is returned from           */
  38. /*            SQL.  It serves as an error log, recording the error         */
  39. /*            code, its corresponding error message, and any other         */
  40. /*            useful information which the program might be able           */
  41. /*            to give.                                                     */
  42. /*                                                                         */
  43. /*  DEPENDENCIES:                                                          */
  44. /*                                                                         */
  45. /*            GEORGETOWN, Gemstone DIAMOND data base kernel,               */
  46. /*            creation of Gemstone BANK data base,                         */
  47. /*            pre-compilation with Gemstone SQLPREP,                       */
  48. /*            binding to data base with SQLPREP or SQLBIND,                */
  49. /*            compilation with IBM C/2, using compiler options:            */
  50. /*                     "/AL /Gs /DLINT_ARGS /DSQL_REL_10 /W3 /Od /FPa"     */
  51. /*                                                                         */
  52. /***  Prologue continued on next page  *************************************/
  53.  
  54.  
  55.  
  56.  
  57. /******************************************       *************/
  58. /*                                                                         */
  59. /*  FUNCTION CALLS:                                                        */
  60. /*                                                                         */
  61. /*            COMPILER LIBRARY                                             */
  62. /*                 stdio.h - fopen,fclose,fprintf,printf                   */
  63. /*                 string.h - strcpy                                       */
  64. /*                                                                         */
  65. /*            GEMSTONE LIBRARY                                             */
  66. /*                 sql.h    - sqlaintp                                     */
  67. /*                 sqlenv.h - sqlestrd,sqlestpd                            */
  68. /*                          - sqleisig (ctrl-break processing)             */
  69. /*                 sqlca.h  - sqlca.sqlcode                                */
  70. /*                                                                         */
  71. /*            OTHER                                                        */
  72. /*                 none                                                    */
  73. /*                                                                         */
  74. /*  ERROR CONDITIONS:                                                      */
  75. /*                                                                         */
  76. /*            NORMAL - specifically tested for and handled by the ap-      */
  77. /*                     application program:  (exit_normal)                 */
  78. /*                   - DOS return code = 0.  (errorlvl)                    */
  79. /*                                                                         */
  80. /*                                                                         */
  81. /*            ABNORMAL - unexpected and resulting in program termination:  */
  82. /*                       (exit_error)                                      */
  83. /*                     - 1015 : start database failed, restart database    */
  84. /*                     - DOS return code = 2.   (errorlvl)                 */
  85. /*                                                                         */
  86. /*  MODIFICATIONS:                                                         */
  87. /*                                                                         */
  88. /*            Date      Author         Description                         */
  89. /*                                                                         */
  90. /*           09/15/87   D. J. Grant    - Update prologue.                  */
  91. /*                                     - Put     on every     */
  92. /*                                         page.                           */
  93. /*                                     - Add code to pass return codes to  */
  94. /*                                         DOS.                            */
  95. /*                                     - Add code to enhance exit_error.   */
  96. /*                                     - Made references to sqlca lower    */
  97. /*                                         case.                           */
  98. /*                                                                         */
  99. /*           10/05/87   D. J. Grant    - change L_DATE type in LOAN table. */
  100. /*                                     - change rc compare in exit_error   */
  101. /*                                         to rc > 0.                      */
  102. /*          10/26/87    D.J.Grant      Added SQLEISIG function call, and   */
  103. /*                                     enhances exit_error to also print   */
  104. /*                                     SQLERRD[0] - [5] and SQL_ERRP.      */
  105. /*           03/08/88    D.J.Grant     - took out some compiler options.   */
  106. /*                                     - add the create Newcust table and  */
  107. /*                                       updated the prologue accordingly. */
  108. /*           02/03/89    W.B.Brown     - upgraded for Rel 3.0              */
  109. /*******  End of prologue  *************************************************/
  110.  
  111. /*******************************         ************************/
  112. /*  SET UP INCLUDES                                                          */
  113. /*****************************************************************************/
  114. #include <stdio.h>
  115. #include <sql.h>
  116. #include <string.h>
  117. #include <sqlenv.h>
  118.  
  119. EXEC SQL INCLUDE sqlca;
  120. /*****************************************************************************/
  121. /*  DEFINITIONS AND DECLARATIONS                                             */
  122. /*****************************************************************************/
  123.    unsigned char  sqlerrp_value[9] = "        ";        /* error value    */
  124. /*******************************/
  125. /* Set up error message buffer */
  126. /*******************************/
  127.  
  128.         unsigned char msgbuf[512];
  129.  
  130. /********************************************/
  131. /* Declarations for D30ACBB1.ERR error file */
  132. /********************************************/
  133.  
  134.         unsigned char  errorfle[]="D30ACBB1.ERR";
  135.  
  136.         unsigned char   tcaseid[]="Test Case Id : D30ACBB1.SQC";
  137.         unsigned char  descript[]="BANK:  base table creation";
  138.  
  139. /***********************************/
  140. /* Declarations for BANK data base */
  141. /***********************************/
  142.  
  143.         unsigned char  database[]="bank";  /* establish database name        */
  144.         unsigned char  password[]="";      /* set up null password           */
  145.  
  146. /***********************************************/
  147. /* Set up variable to pass return codes to DOS */
  148. /***********************************************/
  149.  
  150.         short errorlvl = 0;            /* variable used to pass return codes */
  151.                                        /*   to DOS                           */
  152. /*****************************************************************************/
  153. int  main (void);
  154.      main ()
  155. {
  156.  
  157. /* declare local program variables */
  158.  
  159.    unsigned char rte_label[16];             /* program progress marker       */
  160.    short rc = 0;                            /* variable for return code      */
  161.  
  162. /* declare output file */
  163.  
  164.    FILE *ptr_output;                        /* pointer to output file        */
  165.  
  166.  
  167. /***************************************       ******************/
  168. /*  ERROR HANDLING FOR SQL STATEMENTS                                        */
  169. /*****************************************************************************/
  170.  
  171.         EXEC SQL
  172.              WHENEVER SQLERROR GOTO stop_datab;
  173.         EXEC SQL
  174.              WHENEVER SQLWARNING CONTINUE;
  175.         EXEC SQL
  176.              WHENEVER NOT FOUND CONTINUE;
  177.  
  178. /*****************************************************************************/
  179.  
  180.   strcpy(rte_label,"instal sqleisig");
  181.  
  182.   sqleisig(&sqlca);                             /* ctrl-break processing     */
  183.  
  184.   if (sqlca.sqlcode != 0)
  185.     {
  186.      goto exit_error;
  187.     }
  188.  
  189. /***************************************************************************/
  190. /*****************************************************************************/
  191. /*  START USING DATABASE                                                     */
  192. /*****************************************************************************/
  193.  
  194.         strcpy(rte_label,"start database ");
  195.  
  196.         sqlestrd (database,'S',&sqlca);  /* no password, and shared */
  197.  
  198.         if (sqlca.sqlcode == -1015)
  199.         {
  200.          strcpy(rte_label,"restart databas");
  201.          sqlerest (database,&sqlca);     /* restart database if need*/
  202.          if (sqlca.sqlcode != 0)
  203.          {
  204.            goto exit_error;
  205.          }
  206.          strcpy(rte_label,"start dbase 2nd");
  207.          sqlestrd (database,'S',&sqlca);  /* second start attempt   */
  208.         }
  209.         if (sqlca.sqlcode != 0)
  210.         {
  211.              goto exit_error;             /* exit the program  on error      */
  212.          }
  213.  
  214.  
  215. /***************************************       ******************/
  216. /*****************************************************************************/
  217. /*      Create the CUSTOMER base table                                       */
  218. /*****************************************************************************/
  219.  
  220.      strcpy(rte_label,"create customer");
  221.  
  222.  EXEC SQL CREATE TABLE CUSTOMER
  223.    (CU_SSN    CHAR     (11)   NOT NULL PRIMARY KEY,
  224.     CU_NAME   CHAR     (30)   NOT NULL,
  225.     CU_ADDR1  CHAR     (25)   NOT NULL,
  226.     CU_ADDR2  CHAR     (25)   NOT NULL,
  227.     CU_ZIP    CHAR      (5)   NOT NULL);
  228.  
  229.  
  230.      strcpy(rte_label,"cust tbl commt ");  /* define table comment */
  231.  
  232. EXEC SQL COMMENT ON TABLE CUSTOMER
  233.  
  234.          IS 'This is the customer table of the BANK data base';
  235.  
  236.  
  237.      strcpy(rte_label,"cust col commts");  /* define comments for columns */
  238.  
  239. EXEC SQL COMMENT ON  COLUMN CUSTOMER.CU_SSN
  240.  
  241.          IS 'customer social security number: table key';
  242.  
  243. EXEC SQL COMMENT ON  COLUMN CUSTOMER.CU_NAME
  244.  
  245.          IS 'customer name';
  246.  
  247. EXEC SQL COMMENT ON  COLUMN CUSTOMER.CU_ADDR1
  248.  
  249.          IS 'street address';
  250.  
  251. EXEC SQL COMMENT ON  COLUMN CUSTOMER.CU_ADDR2
  252.  
  253.          IS 'city / state';
  254.  
  255. EXEC SQL COMMENT ON  COLUMN CUSTOMER.CU_ZIP
  256.  
  257.          IS 'zip code - no extensions allowed';
  258.  
  259.  
  260. /*****************************************************************************/
  261. /*      Create the NEWCUST view import table                                 */
  262. /*****************************************************************************/
  263.  
  264.      strcpy(rte_label,"create newcust ");
  265.  
  266.  EXEC SQL CREATE TABLE NEWCUST
  267.    (SSN    CHAR     (11)   NOT NULL,
  268.     NAME   CHAR     (30)   NOT NULL,
  269.     ADDR1  CHAR     (25)   NOT NULL,
  270.     ADDR2  CHAR     (25)   NOT NULL,
  271.     ZIP    CHAR      (5)   NOT NULL);
  272.  
  273.  
  274.      strcpy(rte_label,"newcust tbl cmt");  /* define table comment */
  275.  
  276. EXEC SQL COMMENT ON TABLE NEWCUST
  277.  
  278.          IS 'This is the newcust  table of the BANK data base';
  279.  
  280.  
  281.      strcpy(rte_label,"newcust col cmt");  /* define comments for columns */
  282.  
  283. EXEC SQL COMMENT ON  COLUMN NEWCUST.SSN
  284.  
  285.          IS 'newcust  social security number: table key';
  286.  
  287. EXEC SQL COMMENT ON  COLUMN NEWCUST.NAME
  288.  
  289.          IS 'newcust  name';
  290.  
  291. EXEC SQL COMMENT ON  COLUMN NEWCUST.ADDR1
  292.  
  293.          IS 'street address';
  294.  
  295. EXEC SQL COMMENT ON  COLUMN NEWCUST.ADDR2
  296.  
  297.          IS 'city / state';
  298.  
  299. EXEC SQL COMMENT ON  COLUMN NEWCUST.ZIP
  300.  
  301.          IS 'zip code - no extensions allowed';
  302.  
  303.  
  304. /***************************************       ******************/
  305. /*****************************************************************************/
  306. /*      Create the BOX base table                                            */
  307. /*****************************************************************************/
  308.  
  309.      strcpy(rte_label,"create box tbl ");
  310.  
  311.  EXEC SQL CREATE TABLE BOX
  312.  
  313.    (B_NUMB   CHAR      (3)   NOT NULL,
  314.     B_SIZE   CHAR      (1)   NOT NULL,
  315.     B_RENT   DECIMAL (3,2)   NOT NULL,
  316.     B_SSN    CHAR     (11)           ,
  317.     B_PAYUP  CHAR      (3)           );
  318.  
  319.      strcpy(rte_label,"box tbl comment");   /* define box table comment */
  320.  
  321. EXEC SQL COMMENT ON TABLE BOX
  322.  
  323.          IS 'This is the box table of the BANK data base';
  324.  
  325.      strcpy(rte_label,"box col comment");   /* define box column comments */
  326.  
  327. EXEC SQL COMMENT ON  COLUMN BOX.B_NUMB
  328.  
  329.          IS 'this is the safety deposit box number: table key';
  330.  
  331. EXEC SQL COMMENT ON  COLUMN BOX.B_SIZE
  332.  
  333.          IS 'this is the size of the box: S, M, or L';
  334.  
  335. EXEC SQL COMMENT ON  COLUMN BOX.B_RENT
  336.  
  337.          IS 'box rental amount per month';
  338.  
  339. EXEC SQL COMMENT ON  COLUMN BOX.B_SSN
  340.  
  341.          IS 'this is the associated customer ssn if the box is rented';
  342.  
  343. EXEC SQL COMMENT ON  COLUMN BOX.B_PAYUP
  344.  
  345.          IS 'shows what month the box is paid up for if rented';
  346.  
  347.  
  348. /***************************************       ******************/
  349. /*****************************************************************************/
  350. /*      Create the CHECKING base table                                       */
  351. /*****************************************************************************/
  352.  
  353.      strcpy(rte_label,"create chk tbl ");
  354.  
  355.  EXEC SQL CREATE TABLE CHECKING
  356.    (C_ACCNUMB  CHAR      (8)   NOT NULL PRIMARY KEY,
  357.     C_STARTBAL DECIMAL (9,2)   NOT NULL,
  358.     C_ENDBAL   DECIMAL (9,2)   NOT NULL,
  359.     C_SSN1     CHAR     (11)   NOT NULL,
  360.     C_SSN2     CHAR     (11)           );
  361.  
  362.      strcpy(rte_label,"chkg tbl commt ");   /* define table comment */
  363.  
  364. EXEC SQL COMMENT ON TABLE CHECKING
  365.  
  366.          IS 'This is the checking table of the BANK data base';
  367.  
  368.  
  369.      strcpy(rte_label,"chkg col commts");  /* define column comments  */
  370.  
  371. EXEC SQL COMMENT ON  COLUMN CHECKING.C_ACCNUMB
  372.  
  373.          IS 'checking account number: table key';
  374.  
  375. EXEC SQL COMMENT ON  COLUMN CHECKING.C_STARTBAL
  376.  
  377.          IS 'starting balance of the checking account';
  378.  
  379. EXEC SQL COMMENT ON  COLUMN CHECKING.C_ENDBAL
  380.  
  381.          IS 'ending balance of the checking account';
  382.  
  383. EXEC SQL COMMENT ON  COLUMN CHECKING.C_SSN1
  384.  
  385.          IS 'primary customer ssn associated with this checking account';
  386.  
  387. EXEC SQL COMMENT ON  COLUMN CHECKING.C_SSN2
  388.  
  389.          IS 'optional: secondary customer ssn associated with this account';
  390.  
  391.  
  392. /***************************************       ******************/
  393. /*****************************************************************************/
  394. /*      Create the CREDITS base table                                        */
  395. /*****************************************************************************/
  396.  
  397.      strcpy(rte_label,"create cred tbl");
  398.  
  399.  EXEC SQL CREATE TABLE CREDITS
  400.    (CR_ACCNUMB   CHAR      (8)   NOT NULL,
  401.     CR_TRANDATE  CHAR      (8)   NOT NULL,
  402.     CR_DEPAMT    DECIMAL (8,2)   NOT NULL);
  403.  
  404.  
  405.      strcpy(rte_label,"cred tbl commt ");    /* define table comment */
  406.                                         /* define table comment */
  407. EXEC SQL COMMENT ON TABLE CREDITS
  408.  
  409.          IS 'This is the credits table of the BANK data base';
  410.  
  411.  
  412.      strcpy(rte_label,"cred col commts");
  413.  
  414.                                         /* define comments for columns */
  415. EXEC SQL COMMENT ON  COLUMN CREDITS.CR_ACCNUMB
  416.  
  417.          IS 'associated checking account number: table key';
  418.  
  419. EXEC SQL COMMENT ON  COLUMN CREDITS.CR_TRANDATE
  420.  
  421.          IS 'credit transaction date';
  422.  
  423. EXEC SQL COMMENT ON  COLUMN CREDITS.CR_DEPAMT
  424.  
  425.          IS 'amount of deposit made to the checking account';
  426.  
  427.  
  428. /***************************************       ******************/
  429. /*****************************************************************************/
  430. /*      Create the  DEBITS base table                                        */
  431. /*****************************************************************************/
  432.  
  433.      strcpy(rte_label,"create debs tbl");
  434.  
  435.  EXEC SQL CREATE TABLE DEBITS
  436.    (DB_ACCNUMB   CHAR      (8)   NOT NULL,
  437.     DB_TRANDATE  CHAR      (8)   NOT NULL,
  438.     DB_AMT       DECIMAL (8,2)   NOT NULL,
  439.     DB_CHECKNO   CHAR      (5)   NOT NULL);
  440.  
  441.  
  442.      strcpy(rte_label,"debs tbl commt ");   /* define table comment */
  443.  
  444. EXEC SQL COMMENT ON TABLE DEBITS
  445.  
  446.          IS 'This is the debits table of the BANK data base';
  447.  
  448.  
  449.      strcpy(rte_label,"debs col commts");   /* define comments for columns  */
  450.  
  451. EXEC SQL COMMENT ON  COLUMN DEBITS.DB_ACCNUMB
  452.  
  453.          IS 'associated checking account number: table key';
  454.  
  455. EXEC SQL COMMENT ON  COLUMN DEBITS.DB_TRANDATE
  456.  
  457.          IS 'debit transaction date';
  458.  
  459. EXEC SQL COMMENT ON  COLUMN DEBITS.DB_AMT
  460.  
  461.          IS 'amount of the debit made from checking account';
  462.  
  463. EXEC SQL COMMENT ON  COLUMN DEBITS.DB_CHECKNO
  464.  
  465.          IS 'check number associated with the debit';
  466.  
  467.  
  468. /***************************************       ******************/
  469. /*****************************************************************************/
  470. /*      Create the LOAN base table                                           */
  471. /*****************************************************************************/
  472.  
  473.      strcpy(rte_label,"create loan tbl");
  474.  
  475.  EXEC SQL CREATE TABLE LOAN
  476.    (L_NUMB     CHAR      (8)   NOT NULL,
  477.     L_TYPE     CHAR      (1)   NOT NULL,
  478.     L_RATE     DECIMAL (4,2)   NOT NULL,
  479.     L_TERM     SMALLINT        NOT NULL,
  480.     L_PAYMT    DECIMAL (7,2)   NOT NULL,
  481.     L_BAL      DECIMAL (8,2)   NOT NULL,
  482.     L_INTODAT  DECIMAL (8,2)           ,
  483.     L_SSN      CHAR     (11)   NOT NULL,
  484.     L_DESCRIP  CHAR     (25)   NOT NULL,
  485.     L_DATE     DATE            NOT NULL);
  486.  
  487.  
  488.      strcpy(rte_label,"loan tbl commt ");   /* define table comment  */
  489.  
  490. EXEC SQL COMMENT ON TABLE LOAN
  491.  
  492.          IS 'This is the loan table of the BANK data base';
  493.  
  494.      strcpy(rte_label,"loan col commts");   /* define column comments */
  495.  
  496. EXEC SQL COMMENT ON  COLUMN LOAN.L_NUMB
  497.  
  498.          IS 'loan number: table key';
  499.  
  500. EXEC SQL COMMENT ON  COLUMN LOAN.L_TYPE
  501.  
  502.          IS 'type of loan: M, A, P, H, or O';
  503.  
  504. EXEC SQL COMMENT ON  COLUMN LOAN.L_RATE
  505.  
  506.          IS 'loan interest rate';
  507.  
  508. EXEC SQL COMMENT ON  COLUMN LOAN.L_TERM
  509.  
  510.          IS 'term of loan in months';
  511.  
  512. EXEC SQL COMMENT ON  COLUMN LOAN.L_PAYMT
  513.  
  514.          IS 'amount of loan payment per month';
  515.  
  516. EXEC SQL COMMENT ON  COLUMN LOAN.L_BAL
  517.  
  518.          IS 'remaining balance of the loan';
  519.  
  520. EXEC SQL COMMENT ON  COLUMN LOAN.L_INTODAT
  521.  
  522.          IS 'interest paid to date';
  523.  
  524. EXEC SQL COMMENT ON  COLUMN LOAN.L_SSN
  525.  
  526.          IS 'associated customer ssn';
  527.  
  528. EXEC SQL COMMENT ON  COLUMN LOAN.L_DESCRIP
  529.  
  530.          IS 'description of the specific loan';
  531.  
  532. EXEC SQL COMMENT ON  COLUMN LOAN.L_DATE
  533.  
  534.          IS 'date the loan was initiated';
  535.  
  536. /***************************************       ******************/
  537. /*****************************************************************************/
  538. /*      Create the SAVINGS base table                                        */
  539. /*****************************************************************************/
  540.  
  541.      strcpy(rte_label,"create savg tbl");
  542.  
  543.  EXEC SQL CREATE TABLE SAVINGS
  544.    (S_ACCNUMB  CHAR      (8)   NOT NULL,
  545.     S_IRATE    DECIMAL (4,2)   NOT NULL,
  546.     S_INTTOD   DECIMAL (7,2)           ,
  547.     S_BAL      DECIMAL (9,2)   NOT NULL,
  548.     S_SSN      CHAR     (11)   NOT NULL);
  549. /***********************************************************************/
  550. /* CUSTOMER SAVINGS LOANS CREDITS AND BOX are combined to form another */
  551. /* table   PERFDAT3                                                    */
  552. /***********************************************************************/
  553.    printf("\n creating table PERFDAT3 \n");
  554.    EXEC SQL
  555. CREATE TABLE PERFDAT3
  556. (CU_SSN  CHAR(11)  NOT NULL, CU_NAME CHAR(30) NOT NULL, CU_ADDR1 CHAR(25) NOT NULL, CU_ADDR2 CHAR(25) NOT NULL,
  557. CU_ZIP CHAR(5) NOT NULL,L_NUMB CHAR(8) NOT NULL, L_TYPE CHAR(1) NOT NULL, L_RATE DECIMAL(5,2) NOT NULL,
  558. L_TERM SMALLINT NOT NULL,L_PAYMT DECIMAL (7,2) NOT NULL, L_BAL DECIMAL(9,2) NOT NULL, L_INTODAT DECIMAL(9,2),
  559. L_DESCRIP CHAR(25) NOT NULL, L_DATE DATE, S_ACCNUMB CHAR(8) NOT NULL, S_IRATE DECIMAL(5,2) NOT NULL,
  560. S_INTTOD DECIMAL(7,2), S_BAL DECIMAL(9,2) NOT NULL, B_NUMB CHAR(3) NOT NULL, B_SIZE CHAR(1) NOT NULL,
  561. B_RENT DECIMAL(3,2) NOT NULL, B_PAYUP CHAR(3), C_ACCNUMB CHAR(8) NOT NULL, C_STARTBAL DECIMAL(9,2) NOT NULL,
  562. C_ENDBAL DECIMAL(9,2) NOT NULL);
  563.  
  564.    printf("\n creating table PERFDAt4 \n");
  565.    EXEC SQL
  566. CREATE TABLE PERFDAt4
  567. (CU_SSN  CHAR(11)  NOT NULL, CU_NAME CHAR(30) NOT NULL, CU_ADDR1 CHAR(25) NOT NULL, CU_ADDR2 CHAR(25) NOT NULL,
  568. CU_ZIP CHAR(5) NOT NULL,L_NUMB CHAR(8) NOT NULL, L_TYPE CHAR(1) NOT NULL, L_RATE DECIMAL(5,2) NOT NULL,
  569. L_TERM SMALLINT NOT NULL,L_PAYMT DECIMAL (7,2) NOT NULL, L_BAL DECIMAL(9,2) NOT NULL, L_INTODAT DECIMAL(9,2),
  570. L_DESCRIP CHAR(25) NOT NULL, L_DATE DATE, S_ACCNUMB CHAR(8) NOT NULL, S_IRATE DECIMAL(5,2) NOT NULL,
  571. S_INTTOD DECIMAL(7,2), S_BAL DECIMAL(9,2) NOT NULL, B_NUMB CHAR(3) NOT NULL, B_SIZE CHAR(1) NOT NULL,
  572. B_RENT DECIMAL(3,2) NOT NULL, B_PAYUP CHAR(3), C_ACCNUMB CHAR(8) NOT NULL, C_STARTBAL DECIMAL(9,2) NOT NULL,
  573. C_ENDBAL DECIMAL(9,2) NOT NULL  );
  574.  
  575.  
  576.      strcpy(rte_label,"savg tbl commt ");  /* define table comment */
  577.  
  578. EXEC SQL COMMENT ON TABLE SAVINGS
  579.  
  580.          IS 'This is the savings table of the BANK data base';
  581.  
  582.      strcpy(rte_label,"savg col commts");  /* define column comments */
  583.  
  584. EXEC SQL COMMENT ON  COLUMN SAVINGS.S_ACCNUMB
  585.  
  586.          IS 'savings account number: table key';
  587.  
  588. EXEC SQL COMMENT ON  COLUMN SAVINGS.S_IRATE
  589.  
  590.          IS 'rate of interest paid';
  591.  
  592. EXEC SQL COMMENT ON  COLUMN SAVINGS.S_INTTOD
  593.  
  594.          IS 'interest earned to date';
  595.  
  596. EXEC SQL COMMENT ON  COLUMN SAVINGS.S_BAL
  597.  
  598.          IS 'savings account balance';
  599.  
  600. EXEC SQL COMMENT ON  COLUMN SAVINGS.S_SSN
  601.  
  602.          IS 'associated customer.ssn';
  603.  
  604. /*****************************************************************************/
  605.  
  606.  
  607. /***************************************       ******************/
  608. /*****************************************************************************/
  609. /* STOP USING DATABASE AND EXIT PROGRAM                                      */
  610. /*****************************************************************************/
  611. stop_datab:
  612.  
  613.     strcpy(rte_label,"stop using dbas");
  614.  
  615.         if (sqlca.sqlcode != 0)
  616.         {
  617.              goto exit_error;             /* exit the program due to error   */
  618.         }
  619.  
  620.         sqlestpd (&sqlca);                /* stop using the database         */
  621.         goto exit_normal;                 /* terminate normally              */
  622.  
  623. /*****************************************************************************/
  624.  
  625. exit_error:
  626.  
  627.         errorlvl = 2;                          /* set return code - 2 (error)*/
  628.  
  629.  rc = sqlaintp (msgbuf,512,0,&sqlca);
  630.  
  631.  if (rc > 0)
  632.  {
  633.                                              /* Set up error file processing */
  634.  
  635.     if ((ptr_output = fopen(errorfle,"w")) == NULL)    /* open the error file*/
  636.     {
  637.  
  638.         printf ("\nUNABLE TO OPEN D30ACBB1.ERR");      /* display on screen  */
  639.         printf ("\nSQLCODE IS %ld",sqlca.sqlcode);
  640.         goto exit_normal;
  641.  
  642.     }
  643.                                               /* print error information     */
  644.         fprintf (ptr_output,"%s\n%s\n",tcaseid,descript);
  645.         fprintf (ptr_output,"%s\n",rte_label);
  646.         fprintf (ptr_output,"SQLCODE is %ld.\n",sqlca.sqlcode);
  647.         fprintf (ptr_output,msgbuf);
  648.                                               /* SQL miscellaneous error info*/
  649.  
  650.         fprintf(ptr_output,"\nSQLERRD[0] is %ld",sqlca.sqlerrd[0]);
  651.         fprintf(ptr_output,"\nSQLERRD[1] is %ld",sqlca.sqlerrd[1]);
  652.         fprintf(ptr_output,"\nSQLERRD[2] is %ld",sqlca.sqlerrd[2]);
  653.         fprintf(ptr_output,"\nSQLERRD[3] is %ld",sqlca.sqlerrd[3]);
  654.         fprintf(ptr_output,"\nSQLERRD[4] is %ld",sqlca.sqlerrd[4]);
  655.         fprintf(ptr_output,"\nSQLERRD[5] is %ld",sqlca.sqlerrd[5]);
  656.  
  657.         memcpy (sqlerrp_value, sqlca.sqlerrp,8);
  658.         fprintf(ptr_output,"\nSQLERRP is %s",sqlerrp_value);
  659.  
  660.  
  661.         fclose(ptr_output);                    /* close the output file      */
  662.         sqlestpd (&sqlca);                     /* stop using the database    */
  663.  
  664.  }
  665.  
  666. /*****************************************************************************/
  667.  
  668. exit_normal:
  669.  
  670.         return (errorlvl);                        /* DOS error return code   */
  671.  
  672.  }
  673.