#include #include #include #define USERNAME "TEMP" #define PASSWORD "SECRET" #define SOC_SIZE 4096 #include "HTOracle.h" #ifndef MSDOS #else extern unsigned char *malloc(); #endif char *nullstring=" "; EXEC SQL BEGIN DECLARE SECTION; char *username = USERNAME; char *password = PASSWORD; VARCHAR statement[240]; EXEC SQL END DECLARE SECTION; EXEC SQL INCLUDE sqlca; EXEC SQL INCLUDE sqlda; SQLDA *bind_dp; SQLDA *select_dp; extern SQLDA *sqlald(); extern void sqlprc(); int precision, scale; extern void sqlnul(); short null_ok; short *indicator; PUBLIC int HTOracle ARGS2(CONST char *, keywords, int, soc) { int i,j,k; char variable[30]; char *zozo; char *zezette; char apple[45]; char parrot[50]; char badaboum[SOC_SIZE]; char tralala[SOC_SIZE]; if (!keywords || *keywords=='\0') { HTWriteASCII(soc,"ORION Oracle Database"); HTWriteASCII(soc,"This is an Oracle Server. \nPlease enter your Request (no semicolon at the end) "); return 0; } HTWriteASCII(soc,"<ISINDEX><title>ORION Oracle Database</title>"); HTWriteASCII(soc,"<PLAINTEXT>Answer to Request\n\n\n"); EXEC SQL WHENEVER SQLERROR GOTO sqlerror; EXEC SQL CONNECT :username IDENTIFIED BY :password; bind_dp = sqlald (40, 30, 30); bind_dp->N = 40; select_dp = sqlald (40, 30, 30); select_dp->N = 40; strcpy((char *)statement.arr,keywords); statement.len = strlen(statement.arr); while ((zozo=strchr((char *)statement.arr,'+')) != 0) *zozo=' '; EXEC SQL PREPARE S FROM :statement; EXEC SQL DECLARE C CURSOR FOR S; EXEC SQL DESCRIBE BIND VARIABLES FOR S INTO bind_dp; if (bind_dp->F < 0) { HTWriteASCII(soc, "Too many bind variables for descriptor."); goto sqlerror; } bind_dp->N = bind_dp->F; if (bind_dp->F > 0) { HTWriteASCII(soc, "\nEnter value for bind variable\n"); goto sqlerror; } EXEC SQL OPEN C USING DESCRIPTOR bind_dp; if ((strncmp(statement.arr, "SELECT", 6) != 0) && (strncmp(statement.arr, "select", 6) != 0)) goto end_main; EXEC SQL DESCRIBE SELECT LIST FOR S INTO select_dp; if (select_dp->F < 0) { sprintf(badaboum, "\nToo many select-list variables for descriptor: %d", -(select_dp->F)); HTWriteASCII(soc,badaboum); goto sqlerror; } select_dp->N = select_dp->F; for (i=0; i<select_dp->F; i++) { sqlnul (&(select_dp->T[i]), &(select_dp->T[i]), &null_ok); switch (select_dp->T[i]) { case 1 : break; case 2 : sqlprc (&(select_dp->L[i]), &precision, &scale); if (precision == 0) precision = 40; select_dp->L[i] = precision + 2; if (scale < 0) select_dp->L[i] += -scale; break; case 8 : select_dp->L[i] = 240; break; case 12 : select_dp->L[i] = 9; break; case 23 : break; case 24 : select_dp->L[i] = 240; break; } select_dp->V[i] = malloc(select_dp->L[i]); #ifndef MSDOS select_dp->I[i] = (short *)malloc(sizeof(short)); #else select_dp->I[i] = (unsigned short *)malloc(sizeof (short)); #endif strncpy(parrot,select_dp->S[i],30); if (select_dp->T[i] == 2) { /* erase blanks ending parrot */ while ((zezette=strchr(parrot,' ')) != 0) *zezette='\0'; /* end of erase */ sprintf(badaboum,"%*.*s ", (int)select_dp->L[i], (int)select_dp->L[i], parrot); HTWriteASCII(soc, badaboum); } else { sprintf(badaboum,"%-*.*s ", (int)select_dp->L[i], (int)select_dp->L[i], parrot); HTWriteASCII(soc, badaboum); } } HTWriteASCII(soc,"\n"); for (i=0; i<select_dp->F; i++) { strcpy(apple,"------------------------------------------"); sprintf(badaboum,"%*.*s ", (int)select_dp->L[i], (int)select_dp->L[i], apple); HTWriteASCII(soc,badaboum); if (select_dp->T[i] != 24) select_dp->T[i] = 1; } HTWriteASCII(soc,"\n"); EXEC SQL WHENEVER NOT FOUND GOTO end_main; for (;;) { EXEC SQL FETCH C USING DESCRIPTOR select_dp; for (i=0; i<select_dp->F; i++) { indicator = (short *)select_dp->I[i]; if (*indicator < 0) { sprintf(badaboum,"%-*.*s ", (int)select_dp->L[i], (int)select_dp->L[i], nullstring); HTWriteASCII(soc,badaboum); } else { sprintf(badaboum,"%-*.*s ", (int)select_dp->L[i], (int)select_dp->L[i], select_dp->V[i]); HTWriteASCII(soc,badaboum); } } HTWriteASCII(soc,"\n"); } end_main: sprintf (badaboum,"\n\n# of rows processed = %d\n\n\n", sqlca.sqlerrd[2]); HTWriteASCII(soc, badaboum); for (i=0; i<select_dp->F; i++) { free (select_dp->V[i]); free (select_dp->I[i]); } sqlclu (bind_dp); sqlclu (select_dp); EXEC SQL CLOSE C; EXEC SQL COMMIT WORK RELEASE; return; sqlerror: sprintf(badaboum,"\n%.70s",sqlca.sqlerrm.sqlerrmc); HTWriteASCII(soc, badaboum); EXEC SQL WHENEVER SQLERROR CONTINUE; EXEC SQL ROLLBACK WORK RELEASE; HTWriteASCII(soc,"\n\n\n"); return; }