+ -
当前位置:首页 → 问答吧 → PRO *C的一点疑问

PRO *C的一点疑问

时间:2011-12-22

来源:互联网

代码:
int Loader(char date)
{
EXEC SQL BEGIN DECLARE SECTION; 
int i;
int iCount=0;
char szSQL[1024];
char szErr[512];
struct tagltNumFile ltNumFile;
EXEC SQL END DECLARE SECTION;


  sprintf(szSQL,"select num, file_name, user from t_file_info where date='%s'",date); /*201110*/

  EXEC SQL PREPARE S1 FROM :szSQL;
  EXEC SQL DECLARE lt_Cur CURSOR for S1;
  EXEC SQL OPEN lt_Cur;
  for(int i=0;;++i)
  {
  EXEC SQL FETCH lt_Cur INTO :ltNumFile;
  if(sqlca.sqlcoe!=0) break;
  }
}

错误:

Semantic error at line 114, column 34, file filenamefx_97.pc:
  EXEC SQL FETCH lt_Cur INTO :ltNumFile;
.................................1
PCC-S-02420, Incomplete (or missing) type specification

编译:
proc CODE=CPP SQLCHECK=SEMANTICS userid=user/user@fn_0911 lines=yes iname=filenamefx_97.pc oname=filenamefx_97.c SYS_INCLUDE=/usr/include/c++/4.1.0/ parse=none

作者: Linux_wlj   发布时间: 2011-12-22

up

作者: cbzjzsb123   发布时间: 2011-12-22

C/C++ code

int Loader(char date)//参数为什么不用char* date
{
EXEC SQL BEGIN DECLARE SECTION;  
int i;
int iCount=0;
char szSQL[1024];
char szErr[512];
struct tagltNumFile    ltNumFile;
EXEC SQL END DECLARE SECTION;

//将缓冲区清空
memset(szSQL, 0x00, sizeof(szSQL));
memset(szErr, 0x00, sizeof(szErr));

  sprintf(szSQL,"select num, file_name, user from t_file_info where date='%s'",date); /*201110*/

  EXEC SQL PREPARE S1 FROM :szSQL;
  EXEC SQL DECLARE lt_Cur CURSOR for S1;
  EXEC SQL OPEN lt_Cur;
  for(int i=0;;++i)
  {
  EXEC SQL FETCH lt_Cur INTO :ltNumFile; //sql语句中取出了3列,而这里的into后
                                         //面只有一个变量,当然报错
  if(sqlca.sqlcoe!=0) break;
  }
}


作者: lelewei   发布时间: 2011-12-22

引用 2 楼 lelewei 的回复:

C/C++ code

int Loader(char date)//参数为什么不用char* date
{
EXEC SQL BEGIN DECLARE SECTION;
int i;
int iCount=0;
char szSQL[1024];
char szErr[512];
struct tagltNumFile ltNumFile;
EXEC SQL END DECLAR……

ltNumFile 是个结构体,对应 select 查询出的三列内容!

作者: Linux_wlj   发布时间: 2011-12-22

那你应该把自定义类型和oracle(外部)数据类型进行等价。用type语句。

引用 3 楼 linux_wlj 的回复:

引用 2 楼 lelewei 的回复:

C/C++ code

int Loader(char date)//参数为什么不用char* date
{
EXEC SQL BEGIN DECLARE SECTION;
int i;
int iCount=0;
char szSQL[1024];
char szErr[512];
struct tagltNumFile l……

作者: lelewei   发布时间: 2011-12-22

引用 4 楼 lelewei 的回复:

那你应该把自定义类型和oracle(外部)数据类型进行等价。用type语句。

引用 3 楼 linux_wlj 的回复:

引用 2 楼 lelewei 的回复:

C/C++ code

int Loader(char date)//参数为什么不用char* date
{
EXEC SQL BEGIN DECLARE SECTION;
int i;
int iCoun……

可以给下代码么?谢谢!刚开始学习

作者: Linux_wlj   发布时间: 2011-12-22

你可以这样
C/C++ code

fetch into :ltNumFile.a, :ltNumFile.b, :ltNumFile.c;....





引用 5 楼 linux_wlj 的回复:

引用 4 楼 lelewei 的回复:

那你应该把自定义类型和oracle(外部)数据类型进行等价。用type语句。

引用 3 楼 linux_wlj 的回复:

引用 2 楼 lelewei 的回复:

C/C++ code

int Loader(char date)//参数为什么不用char* date
{
EXEC SQL BEGIN DECLARE SECT……

作者: lelewei   发布时间: 2011-12-22