现在的位置: 首页 > 综合 > 正文

Pro*c源程序中使用宿主结构保存查询结果

2019年08月12日 ⁄ 综合 ⁄ 共 1170字 ⁄ 字号 评论关闭

开发环境: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)
)

表中数据如截图:


 

抱歉!评论已关闭.