Pro*C problem - declare cursor
Date: 15 Jun 94 12:12:03 EST
Message-ID: <1994Jun15.121203.4117_at_vaxa>
Hi all,
I am very new to Pro*C, and I am having problem in declaring
a "global" cursor, which other sub-programs can access it.
The following C program calls 5 small sub programs, and each one
of those does its own task.
I declare a cursor in sub_declare_cursor() as "employee", however, when the main program calls sub_fetch_info() to fetch some data from the table, an error message prints out.
PCC-S-0014: Undeclared SQL Identifier "EMPLOYEE: at line in file sub_fetch_info.pc
How to declare a cursor in one sub-program, and this cursor can be seen in other sub-programs?
Thanks for your help.
Vito Kwan
vkwan1_at_vaxb.hofstra.edu
/* main */
#include <stdio.h>
extern void sub_oracle_connect (void); extern void sub_declare_cursor (void); extern void sub_fetch_info (char io_buffer[]); extern void sub_close_cursor (void); extern void sub_oracle_exit (void);
main (void)
{
char io_buffer[50];
sub_oracle_connect ();
sub_declare_cursor ();
for(;;) {
sub_fetch_info (io_buffer); printf ("The employee info: %s\n", io_buffer);}
sub_close_cursor ();
sub_oracle_exit ();
}
/* sub_oracle_connect */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[20];
VARCHAR password[20];
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE sqlca;
void sub_oracle_connect (void);
void sub_oracle_connect (void)
{
strcpy(username.arr,"scott");
username.len=strlen(username.arr);
strcpy(password.arr,"tiger");
password.len=strlen(password.arr);
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL CONNECT :username IDENTIFIED BY :password;
printf ("\nConnected to Oracle as user: %s\n", username.arr);
return;
sqlerror:
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\nOracle error detected:\n"); printf("\n%.70s \n", sqlca.sqlerrm.sqlerrmc); EXEC SQL ROLLBACK RELEASE; exit(1);
}
/* sub_declare_cursor */
#include <stdio.h>
EXEC SQL INCLUDE sqlca;
void sub_declare_cursor (void);
void sub_declare_cursor (void)
{
EXEC SQL DECLARE employee CURSOR FOR
SELECT EMPNO, ENAME, DEPTNO, SAL FROM EMP;";
EXEC SQL OPEN employee;
}
/* sub_close_cursor */
#include <stdio.h>
EXEC SQL INCLUDE sqlca;
void sub_close_cursor (void);
void sub_close_cursor (void)
{
EXEC SQL CLOSE employee;
}
/* sub_fetch_info */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
EXEC SQL INCLUDE sqlca;
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR emp_number[4];
VARCHAR emp_name[15];
VARCHAR dept_number[4];
VARCHAR salary[7];
EXEC SQL END DECLARE SECTION;
void sub_fetch_info (char io_buffer[]);
void sub_fetch_info (char io_buffer[])
{
EXEC SQL FETCH employee
INTO :emp_number, :emp_name, :dept_number, :salary;
emp_number.arr[emp_number.len]='\0';
emp_name.arr[emp_name.len]='\0';
dept_number.arr[dept_number.len]='\0';
salary.arr[salary.len]='\0';
strcpy(io_buffer, emp_number.arr); strcat(io_buffer, emp_name.arr); strcat(io_buffer, dept_number.arr); strcat(io_buffer, salary.arr);
io_buffer[strlen(io_buffer)] = '\0';
}
/* sub_oracle_exit */
#include <stdio.h>
#include <stdlib.h>
EXEC SQL INCLUDE sqlca;
void sub_oracle_exit (void);
void sub_oracle_exit (void)
{
EXEC SQL COMMIT WORK RELEASE;
exit(0);
}
Received on Wed Jun 15 1994 - 19:12:03 CEST