Yurttas/PL/DBL/oracle/F/03/SPJ/Suppliers-ins.pc

From ZCubes Wiki
Jump to navigation Jump to search
  1/*
  2REM
  3REM
  4REM Suppliers-ins.pc
  5REM
  6REM
  7*/
  8
  9#include <stdio.h>
 10#include <sqlca.h>
 11
 12#define UNAME_LEN 32
 13#define PWD_LEN   16
 14
 15VARCHAR username[UNAME_LEN]; /* VARCHAR is an Oracle-supplied struct */
 16VARCHAR password[PWD_LEN];   /* varchar can be in lower case also. */
 17
 18char u_name[UNAME_LEN];
 19char pwd[PWD_LEN];
 20
 21struct {
 22  char sn[4];
 23  char sname[16];
 24  int status;
 25  char city[16];
 26} suppliers;
 27
 28void connect_to_oracle();
 29void sql_error();
 30
 31
 32void main(int argc, char* argv[]) {
 33  FILE *in_file;
 34
 35  char in_filename[32];
 36
 37  if(argc<2) {
 38    printf("Enter the input filename : ");
 39    scanf("%s", in_filename);
 40  }
 41  else strcpy(in_filename, argv[1]);
 42
 43  in_file = fopen(in_filename, "r");
 44
 45  if(in_file==NULL)
 46    printf("File named as %s is not opened for input.\n", in_filename);
 47  else {
 48    connect_to_oracle();
 49
 50    EXEC SQL
 51      WHENEVER SQLERROR DO sql_error("Error in INSERT_table: Suppliers");
 52
 53    while(fscanf(in_file,"%3c %7c %2d %7c\n",suppliers.sn,
 54                                             suppliers.sname,
 55                                            &suppliers.status,
 56                                             suppliers.city)!=EOF){
 57      EXEC SQL
 58        INSERT INTO Suppliers
 59          VALUES(:suppliers.sn,
 60                 :suppliers.sname,
 61                 :suppliers.status,
 62                 :suppliers.city);
 63    }
 64  }
 65
 66  EXEC SQL COMMIT WORK RELEASE;
 67
 68  exit(0);
 69}
 70
 71
 72void sql_error(char* msg) {
 73  char err_msg[128];
 74  int buflen, msglen;
 75
 76  EXEC SQL WHENEVER SQLERROR CONTINUE;
 77
 78  printf("%s \n", msg);
 79  buflen = sizeof(err_msg);
 80  sqlglm(err_msg, &buflen, &msglen);
 81  printf("%.*s \n", msglen, err_msg);
 82  exit(1);
 83}
 84
 85
 86void connect_to_oracle() {
 87  /* get your username/passwd from "user_pwd.txt" file */
 88
 89  FILE *in_file;
 90  in_file = fopen("user_pwd.txt", "r");
 91  fscanf(in_file, "%s", u_name);
 92  fscanf(in_file, "%s", pwd);
 93
 94  strncpy((char *) username.arr, u_name, UNAME_LEN);
 95  username.len = strlen((char *) username.arr);
 96
 97  strncpy((char *) password.arr, pwd, PWD_LEN);
 98  password.len = strlen((char *) password.arr);
 99
100  EXEC SQL WHENEVER SQLERROR DO sql_error ("ORACLE error-- ");
101  EXEC SQL CONNECT :username IDENTIFIED BY :password;
102
103  printf("connected to oracle - \n");
104}