开发环境: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) )
表中数据如截图: