/* * Program type: Embedded Static SQL * * Description: * This program declares a cursor, opens the cursor, and loops * fetching multiple rows. All departments that need to hire * a manager are selected and displayed. * The contents of this file are subject to the Interbase Public * License Version 1.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy * of the License at http://www.Interbase.com/IPL/ * * Software distributed under the License is distributed on an * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express * or implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code was created by Interbase Software Corporation * and its successors. Portions created by Borland/Inprise are * Copyright (C) 1992-1998 and 1999-2000 Borland/Inprise. Portions * created by InterBase Software Corporation are Copyright (C) * 1998-1999 InterBase Software Corporation. * * Copyright (C) 2000 InterBase Software Corporation * All Rights Reserved. * Contributor(s): ______________________________________. */ #include "example.h" #include #include EXEC SQL BEGIN DECLARE SECTION; EXEC SQL END DECLARE SECTION; int main (void) { BASED_ON department.department department; BASED_ON department.department parent_dept; BASED_ON department.location location; /* Trap all errors. */ EXEC SQL WHENEVER SQLERROR GO TO Error; /* Trap SQLCODE = -100 (end of file reached during a fetch). */ EXEC SQL WHENEVER NOT FOUND GO TO AllDone; /* Ignore all warnings. */ EXEC SQL WHENEVER SQLWARNING CONTINUE; /* Declare the cursor for selecting all departments without a manager. */ EXEC SQL DECLARE to_be_hired CURSOR FOR SELECT d.department, d.location, p.department FROM department d, department p WHERE d.mngr_no IS NULL AND d.head_dept = p.dept_no; /* Open the cursor. */ EXEC SQL OPEN to_be_hired; printf("\n%-25s %-15s %-25s\n\n", "DEPARTMENT", "LOCATION", "HEAD DEPARTMENT"); /* * Select and display all rows. */ while (SQLCODE == 0) { EXEC SQL FETCH to_be_hired INTO :department, :location, :parent_dept; /* * If FETCH returns with -100, the processing will jump * to AllDone before the following printf is executed. */ printf("%-25s %-15s %-25s\n", department, location, parent_dept); } /* * Close the cursor and release all resources. */ AllDone: EXEC SQL CLOSE to_be_hired; EXEC SQL COMMIT RELEASE; return 0; /* * Print the error, and exit. */ Error: isc_print_sqlerror((short)SQLCODE, gds__status); return 1; }