开发环境:VC6 + XP + Oracle10
Pro*c源程序如下:
/*
功能:演示了在pro*c源程序中使用结构体(宿主结构)来保存查询结果
使用宿主结构的注意事项
1. 结构成员的数据类型、顺序必须与内嵌SQL语句中列的数据类型和顺序匹配
2. 宿主结构与PL/SQL的记录类型(RECORD)非常类似。但注意,在开发内嵌PL/SQL程序时不能将
宿主结构作为PL/SQL记录变量的宿主变量
3. 不能使用嵌套的宿主结构
4. 不能使用C联合(union)作为宿主结构,也不能在宿主结构中嵌套联合。
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
int connect();
void sql();
void sql_error();
void main()
{
EXEC SQL WHENEVER SQLERROR DO sql_error();
if(connect() == 0)
{
sql();
EXEC SQL COMMIT RELEASE;
}
else
printf("连接失败\n");
}
int connect() // connect to oracle database
{
char username[10], password[10], server[10];
strcpy(username, "llp");
strcpy(password, "llp");
strcpy(server, "ORAL");
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;
if(sqlca.sqlcode == 0)
return 0;
else
return sqlca.sqlcode;
}
void sql_error() // print error infomation
{
printf("%.*s\n", sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
}
void sql() // 执行SQL语句
{
char iname[10];
struct // 定义结构体及变量
{
char name[10];
float salary;
}emp_record;
printf("请输入iname: ");
gets(iname); // 接收name的输入
fflush(stdin);
EXEC SQL Select name, salary into :emp_record from PLSQLTEST where name=:iname;
printf("name = %s, salary = %.f\n", emp_record.name, emp_record.salary);
}
对应的表结构为:
create table PLSQLTEST
(
SALARY NUMBER,
NAME VARCHAR2(10)
)
表中数据如截图: