EXEC SQL BEGIN DECLARE SECTION; char db_name[30]; mlong cat_num; loc_t cat_descr; EXEC SQL END DECLARE SECTION; ⋮
if((fd = open(descfl, O_WRONLY)) < 0) { printf("\nCan't open file: %s, errno: %d\n", descfl, errno); EXEC SQL disconnect current; printf("GETCD_OF Sample Program over.\n\n"): exit(1); } /* * Prepare locator structure for select of cat_descr
GBase 8s ESQL/C 编程指南 南大通用数据技术股份有限公司 - 150 -
*/ cat_descr.loc_loctype = LOCFILE; /* set loctype for open file */ cat_descr.loc_fd = fd; /* load the file descriptor */ cat_descr.loc_oflags = LOC_APPEND; /* set loc_oflags to append */ EXEC SQL select catalog_num, cat_descr /* verify catalog number */ into :cat_num, :cat_descr from catalog where catalog_num = :cat_num; if(exp_chk2("SELECT", WARNNOTIFY) != 100) /* if not found */ printf("\nCatalog number %ld not found in catalog table\n", cat_num); else { if(ret < 0) {
EXEC SQL BEGIN DECLARE SECTION; mlong cat_num; loc_t cat_descr; EXEC SQL END DECLARE SECTION; ⋮
if ((fd = open(descfl, O_RDONLY)) < 0) /* open input file */ {
⋮
GBase 8s ESQL/C 编程指南 南大通用数据技术股份有限公司 - 152 -
} while(getcat_num(fd, line, sizeof(line))) /* get cat_num line from file */ {
⋮
printf("\nReading catalog number %ld from file...\n", cat_num); flpos = lseek(fd, 0L, 1); length = getdesc_len(fd); flpos = lseek(fd, flpos, 0);
/* lookup cat_num in catalog table */ EXEC SQL select catalog_num into :cat_num from catalog where catalog_num = :cat_num; if((ret = exp_chk2("SELECT", WARNNOTIFY)) == 100) /* if not found */ { printf("\nCatalog number %ld not found in catalog table.", cat_num);
⋮
} /*if found */ cat_descr.loc_loctype = LOCFILE; /* update from open file */ cat_descr.loc_fd = fd; /* load file descriptor */ cat_descr.loc_oflags = LOC_RONLY; /* set file-open mode (read) */ cat_descr.loc_size = length; /* set size of simple large obj */
/* update cat_descr column of catalog table */ EXEC SQL update catalog set cat_descr = :cat_descr
EXEC SQL BEGIN DECLARE SECTION; char db_name[30]; mlong cat_num;
GBase 8s ESQL/C 编程指南 南大通用数据技术股份有限公司 - 155 -
loc_t cat_descr; EXEC SQL END DECLARE SECTION; ⋮
printf("\nEnter a catalog number: "); /* prompt for catalog number */ getans(ans, 6); if(rstol(ans, &cat_num)) /* cat_num string too long */ { printf("\tCannot convert catalog number '%s' to integer\n", ans); continue; } while(1) { printf("Enter the name of the file to receive the description: "); if(!getans(ans, 15)) continue; break; } strcpy(descfl, ans); break; }
/* * Prepare locator structure for select of cat_descr */ cat_descr.loc_loctype = LOCFNAME; /* set loctype for in memory */ cat_descr.loc_fname = descfl; /* load the addr of file name */ cat_descr.loc_oflags = LOC_APPEND; /* set loc_oflags to append */ EXEC SQL select catalog_num, cat_descr /* verify catalog number */ into :cat_num, :cat_descr from catalog
GBase 8s ESQL/C 编程指南 南大通用数据技术股份有限公司 - 156 -
where catalog_num = :cat_num; if(exp_chk2("SELECT", WARNNOTIFY) != 0 ) /* if error, display and quit */ printf("\nSelect for catalog number %ld failed\n", cat_num);
EXEC SQL disconnect current; printf("\nGETCD_NF Sample Program over.\n\n"); }
EXEC SQL BEGIN DECLARE SECTION; mlong cat_num; loc_t cat_descr; EXEC SQL END DECLARE SECTION; ⋮
cat_descr.loc_loctype = LOCMEMORY; /* set loctype for in memory */ cat_descr.loc_bufsize = -1; /* let server get memory */ EXEC SQL select catalog_num, cat_descr /* verify catalog number */ into :cat_num, :cat_descr from catalog where catalog_num = :cat_num;
/* if error,display and quit */ if ((ret = exp_chk2("SELECT", WARNNOTIFY)) == 100) { printf("\nCatalog number %ld not found in catalog table\n", cat_num); EXEC SQL disconnect current; printf("UPDCD_NF Sample Program over.\n\n"); exit(1); } if(ret<0) { EXEC SQL disconnect current; printf("UPDCD_NF Sample Program over.\n\n"); exit(1); } prdesc(); /* print current cat_descr */
/* Update? */ ans[0] = ' ';
GBase 8s ESQL/C 编程指南 南大通用数据技术股份有限公司 - 158 -
while((ans[0] = LCASE(ans[0])) != 'y' && ans[0] != 'n') { printf("Update this description? (y/n) …"); scanf("%1s", ans); } if(ans[0] == 'y') { cat_descr.loc_loctype = LOCFNAME; /* set type to named file */ cat_descr.loc_fname = descfl; /* supply file name */ cat_descr.loc_oflags = LOC_RONLY; /* set file-open mode (read) */ cat_descr.loc_size = -1; /* set size to size of file */ EXEC SQL update catalog set cat_descr = :cat_descr /* update cat_descr column */ where catalog_num = :cat_num; if(exp_chk2("UPDATE", WARNNOTIFY) < 0) /* check status */ { EXEC SQL disconnect current; printf("UPDCD_NF Sample Program over.\n\n"); exit(1); } printf("Update complete.\n"); }