- 论坛徽章:
- 0
|
假期看了ESQL和Unix中crontab方面的资料,大家帮我看看我改的代码,实现的是从远程数据表读数据写入本地库的表里面,但是资料提到的都是在同一个库里面进行操作,没有提到异地库的操作。我暂时没有多的机子来搭环境调试,所以请大家帮我看看帮我改改,谢谢拉!
/*定义两个常量*/
EXEC SQL define NAME_LEN 15;
EXEC SQL define AGE_LEN 15;
main()
{
/*声明宿主变量*/
EXEC SQL BEGIN DECLARE SECTION;
char p_name[ NAME_LEN + 1 ];
char p_age[ AGE_LEN + 1 ];
EXEC SQL END DECLARE SECTION;
/*出错处理*/
EXEC SQL WHENEVER ERROR STOP;
/*连接到远程数据库far_db,计算机名(服务器名)为far_pc*/
/*本地数据库local_db,本地计算机名local_pc*/
EXEC SQL connect to 'far_pc.far_db';
if ( SQLCODE < 0 )
{ printf("CONNECT failed: %d\n", SQLCODE)
exit(0);
/*声明一个游标,查询所有30岁以下的人的姓名*/
EXEC SQL DECLARE fetch_data cursor for
select name, age
into :p_name, :p_age
from t_man
where age < 30;
/*打开游标*/
EXEC SQL open democursor;
/*如果SQLSTATE不等于“00”,那么表示到达了数据集的尾部(02),或者产生了错误(大于02)*/
for (;
{
EXEC SQL fetch democursor;
if (strncmp(SQLSTATE, "00", 2) != 0)
break; /*出错便跳出,正常的话就把当前记录插入本地库中的表里,依次循环直到游标数据集的尾部*/
EXEC SQL insert into local_db.local_table (name,age) values (:p_name,:p_age);
}
/*打印错误信息*/
if (strncmp(SQLSTATE, "02", 2) != 0)
printf("SQLSTATE after fetch is %s\n", SQLSTATE);
/*关闭游标*/
EXEC SQL close fetch_data
/*释放游标占用的资源*/
EXEC SQL free fetch_data
/*断开数据库服务器的连接*/
EXEC SQL disconnect current;
printf("\nDEMO1 Program over.\n\n" ;
}
主要就是异地和本地表的描述那里我觉得我写的可能不对。
另外想问的就是:
1:如何确认我的Esql的环境已经装完?是不是只要输入esql命令系统能认出来就OK拉?
2:编译上面这个脚本后好象是生成一个可执行文件吧,是吗,我没有环境,郁闷。
3:把这个生成的可执行文件加到crontab里面就可以了吧?
以上疑惑恳请大伙指教,谢谢!
[ 本帖最后由 lb_20016 于 2006-5-8 13:51 编辑 ] |
|