在mzq用户下建立的表结构如下:
desc trade_type;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
TT_ID NOT NULL VARCHAR2(3)
TT_NAME NOT NULL VARCHAR2(12)
TT_IS_SELL NOT NULL NUMBER(1)
TT_IS_MRKT NOT NULL NUMBER(1)
程序如下:
#include <stdio.h>
#include <string.h>
EXEC SQL INCLUDE SQLCA;main()
{
EXEC SQL BEGIN DECLARE SECTION;
static char usr[80];
static char wd[80];
char id[3];
char name[12];
EXEC SQL END DECLARE SECTION;memset (usr,'\0',sizeof(usr));
memset(wd,'\0',sizeof(wd));
memset(id,'\0',sizeof(id));
memset(name,'\0',sizeof(name));
strcpy(usr,"mzq");
strcpy(wd,"youyou");
strcpy(id,"TMB");
strcpy(name,"feng");
EXEC SQL CONNECT :usr IDENTIFIED BY :wd;
if(sqlca.sqlcode!=0)
{
printf("link error!");
}
else
{
printf("\nConnected to Oracle as user :%s\n",usr);
printf("link!\n");
EXEC SQL SELECT tt_name INTO :name FROM trade_type WHERE tt_id =:id;//怀疑没有执行
printf("%s %s",id,name);
}
exit(0);
}
执行该程序时,结果如下:
Connected to Oracle as user :mzq
link!
TMB feng但是结果是不正确的,
在数据库里查询,正确的结果应为:
select tt_name from trade_type where tt_id='TMB';TT_NAME
------------
Market-Buy此外,在pro*C程序中,如果我给name赋值为空,则输出也为空,所以我判断sql语句没有执行,不知原因在哪里。
还有,在该程序里调用建立在该表上的存储过程时,没有任何的错误信息,但存储过程就是不执行。而我用以前复制的scott用户的emp表在pro*c中进行查询操作或是调用存储过程时,却能正常执行。难道自己建立的表还存在允不允许外部访问的问题?初学,现在时一头雾水啊,急寻众位指点!多谢~
desc trade_type;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
TT_ID NOT NULL VARCHAR2(3)
TT_NAME NOT NULL VARCHAR2(12)
TT_IS_SELL NOT NULL NUMBER(1)
TT_IS_MRKT NOT NULL NUMBER(1)
程序如下:
#include <stdio.h>
#include <string.h>
EXEC SQL INCLUDE SQLCA;main()
{
EXEC SQL BEGIN DECLARE SECTION;
static char usr[80];
static char wd[80];
char id[3];
char name[12];
EXEC SQL END DECLARE SECTION;memset (usr,'\0',sizeof(usr));
memset(wd,'\0',sizeof(wd));
memset(id,'\0',sizeof(id));
memset(name,'\0',sizeof(name));
strcpy(usr,"mzq");
strcpy(wd,"youyou");
strcpy(id,"TMB");
strcpy(name,"feng");
EXEC SQL CONNECT :usr IDENTIFIED BY :wd;
if(sqlca.sqlcode!=0)
{
printf("link error!");
}
else
{
printf("\nConnected to Oracle as user :%s\n",usr);
printf("link!\n");
EXEC SQL SELECT tt_name INTO :name FROM trade_type WHERE tt_id =:id;//怀疑没有执行
printf("%s %s",id,name);
}
exit(0);
}
执行该程序时,结果如下:
Connected to Oracle as user :mzq
link!
TMB feng但是结果是不正确的,
在数据库里查询,正确的结果应为:
select tt_name from trade_type where tt_id='TMB';TT_NAME
------------
Market-Buy此外,在pro*C程序中,如果我给name赋值为空,则输出也为空,所以我判断sql语句没有执行,不知原因在哪里。
还有,在该程序里调用建立在该表上的存储过程时,没有任何的错误信息,但存储过程就是不执行。而我用以前复制的scott用户的emp表在pro*c中进行查询操作或是调用存储过程时,却能正常执行。难道自己建立的表还存在允不允许外部访问的问题?初学,现在时一头雾水啊,急寻众位指点!多谢~
改成
char *name;
试一下
static char usr[80];
static char wd[80];
char id[3];
char name[12];
EXEC SQL END DECLARE SECTION; 改成:EXEC SQL BEGIN DECLARE SECTION;
static VARCHAR usr[80];
static VARCHAR wd[80];
VARCHAR id[3];
VARCHAR name[12];
EXEC SQL END DECLARE SECTION; strcpy(usr,"mzq");
改成:
strcpy(usr.arr, "mzq");
usr.len = strlen(usr.arr);其他如:
strcpy(wd,"youyou");
strcpy(id,"TMB");
strcpy(name,"feng");
同此办理。楼主可以到Oracle Pro *C/C++ 和OCI 最详细的教程下载这本书看看,里面有非常详细的讲解。