/******************************************************* ** ** A sample program that demonstrates the use of Static embedded SQL. ** Before compiling this program, be sure you have created a table ** called video and inserted some tuples in it. ** ********************************************************/ #include /* sqlca: is the sql communications area. All error codes * are returned from db2 in that structure which is filled * each time an interaction with db2 takes place. */ EXEC SQL INCLUDE SQLCA; /* SQL communication area structure */ EXEC SQL BEGIN DECLARE SECTION; /* declare host variables */ char db_name[8]; /* database name */ char video_title[30]; /* title of the video */ short video_id; /* serial number */ char director[20]; /* director name */ EXEC SQL END DECLARE SECTION; /* These lines are redundant here because the default * action is to continue. They just show the kind of * errors that could arise and one way to control them. */ EXEC SQL WHENEVER SQLWARNING CONTINUE; /* sqlca.sqlcode > 0 */ EXEC SQL WHENEVER SQLERROR CONTINUE; /* sqlca.sqlcode < 0 */ EXEC SQL WHENEVER NOT FOUND CONTINUE; /* sqlca.sqlcode = 100 */ /* sqlca.sqlcode = 0 (no error) */ void main() { strcpy(db_name, "csc343h"); /* C variables are preceded by a colon when they are passed to DB2 */ EXEC SQL CONNECT TO :db_name; if (sqlca.sqlcode != 0) { printf("Connect failed!: reason %ld\n", sqlca.sqlcode); exit(1); } /* cursor delcaration. Have to declare a cursor each time you * want tuples back from db2 */ EXEC SQL DECLARE c1 CURSOR FOR SELECT video_title FROM video; /* you have to open the cursor in order to get tuples back */ EXEC SQL OPEN c1; do { /* fetch tuples from the cursor. This will execute the statement * the cursor implements and will return the results */ EXEC SQL FETCH c1 into :video_title; if (SQLCODE != 0) { break; /* SQLCODE refers to sqlca.sqlcode */ } /* host variables should have ':' prefix when they are used in DB2 commands */ printf("%s\n", video_title); } while (1); EXEC SQL CLOSE c1; EXEC SQL CONNECT RESET; }