简单问题,请指教!!!!

nicholaz 2002-04-12 10:29:59
在linux下用c写一个程序,可以将文本文件导入oracle数据库,怎样来截取数据呢?详细点好吗?
...全文
29 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
shipatrioc 2002-04-16
  • 打赏
  • 举报
回复
如果文本文件中一行算一条记录,每行中有特殊字符来分割字段,你可以这样
(假设一条记录有两个字段,两字段间用"#"分割)
exec sql begin declare section;
char *ch1;
char *ch2;
exec sql end declare section;
char buffer[1024];
char* next;
FILE *fp;
fp = fopen("a.txt","r");
while(!feof(fp))
{
fgets(buffer,1024,fp);
buffer[strlen(buffer)]=0;
ch1 = strtok(buffer,"#");
ch2 = strtok(NULL,"#");
exec sql insert into ta_1(field1,field2) values(:ch1,:ch2);
}


shipatrioc 2002-04-16
  • 打赏
  • 举报
回复
如果文本文件中一行算一条记录,每行中有特殊字符来分割字段,你可以这样
(假设一条记录有两个字段,两字段间用"#"分割)
exec sql begin declare section;
char *ch1;
char *ch2;
exec sql end declare section;
char buffer[1024];
char* next;
FILE *fp;
fp = fopen("a.txt","r");
while(!feof(fp))
{
fgets(buffer,1024,fp);
buffer[strlen(buffer)]=0;
ch1 = strtok(buffer,"#");
ch2 = strtok(NULL,"#");
exec sql insert into ta_1(field1,field2) values(:ch1,:ch2);
}


flowerofwind 2002-04-16
  • 打赏
  • 举报
回复
nicholaz
你的问题可以通过调用oci实现,也就是用oci编写一个相当于sqlserver bcp的程序,至于怎么截取记录我觉得这个很简单,属于c/c++中简单的文本文件处理的问题,可以考虑一下函数,fgets(读取文件的一行),strtok(通过特定的分割符取出没个字段),然后通过oci绑定,执行就可以了
shipatrioc 2002-04-16
  • 打赏
  • 举报
回复
读取文件不就可以了!
exec sql begin declare section;
char ch1[10];
char ch2[10];
FILE *fp;
fp = fopen("a.txt","r");
while(!feof(fp))
{
fread((void *)ch1,10,1,fp);
fread((void *)ch2,10,1,fp);
exec sql insert into ta_1(field1,field2) values(:ch1,:ch2);
}
关键是看文件的格式
nicholaz 2002-04-15
  • 打赏
  • 举报
回复
TO shipatrioc(风吹雨打哗啦啦)
用什么方法截取数据存入宿主变量?
pcmax 2002-04-12
  • 打赏
  • 举报
回复
关注
nicholaz 2002-04-12
  • 打赏
  • 举报
回复
是可以把它写成procedure来执行,但是这样只能对服务器上的文本文件进行导入,我想知道如果是客户端的文本文件,怎么样导入呢?
shipatrioc 2002-04-12
  • 打赏
  • 举报
回复
我一般是把文本文件写成sql文件,在到sqlplus下执行.
还有更自动化的...
关注
ykliu1 2002-04-12
  • 打赏
  • 举报
回复
用SQL*LOADER吧,它是ORACLE专门用来解决此问题的
shipatrioc 2002-04-12
  • 打赏
  • 举报
回复
当然可以!
把文本文件的数据读到宿主变量里不久行了
nicholaz 2002-04-12
  • 打赏
  • 举报
回复
我的意思就是在文本文件中一行算一条记录,每行中有特殊字符来分割字段,
要怎样才能将一段一段数据取出存入变量中,可以用破pro*c实现吗?


我写了个procedure来执行,但是这样只能对服务器上的文本文件进行导入,我要是想对客户端导入该怎样做?
KingSunSha 2002-04-12
  • 打赏
  • 举报
回复
其实sqlldr做的就是你想要的功能,只是界面难看一点

我不明白你说的截取数据是什么意思,能解释一下吗?

2,596

社区成员

发帖
与我相关
我的任务
社区描述
Sybase相关技术讨论区
社区管理员
  • Sybase社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧