高手帮忙 调试执行如下:
bash-3.1# proc ok.pcPro*C/C++: Release 10.2.0.1.0 - Production on Fri May 2 10:26:48 2008Copyright (c) 1982, 2005, Oracle. All rights reserved.System default option values taken from: /usr/local/ora//precomp/admin/pcscfg.cfg
bash-3.1# gcc -o ok ok.c /usr/local/ora/lib/libclntsh.so
bash-3.1# ./ok <ERROR> Error while trying to retrieve text for error ORA-12514代码如下:
#include "/usr/local/ora/precomp/public/sqlca.h"#ifndef ORA_PROC#include <stdio.h>
#include <string.h>
#include <stdlib.h>#endif void sql_error(char *msg)
{
printf("\n%s %s\n", msg,(char *)sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(0);
}int main()
{
EXEC SQL INCLUDE sqlca;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL WHENEVER SQLERROR DO sql_error(" <ERROR> ");
EXEC SQL BEGIN DECLARE SECTION;
char oraCN[50];
char name[25];
char id[3];
EXEC SQL END DECLARE SECTION;
memset(oraCN, 0, 50);
strcpy(oraCN,"train22/train22@//192.168.135.227:1521/orcl;");
/* oraCN.len = strlen(oraCN.arr);
oraCN.arr[oraCN.len] = '\0';*/
EXEC SQL CONNECT :oraCN;
printf("Connect!\n");
EXEC SQL DECLARE stu_cursor CURSOR FOR
SELECT bank_code,bank_name from par_bank WHERE IS_JW = 1;
printf("DECLARE CURSOR OK!\n");
EXEC SQL OPEN stu_cursor;
if(sqlca.sqlcode == 0)
{
printf("OPEN CURSOR OK!\n");
}
else {
printf("open err![%d]", sqlca.sqlcode);
}
while(1)
{
EXEC SQL FETCH stu_cursor INTO :id,:name;
if(sqlca.sqlcode != 0 && sqlca.sqlcode != 1403)
{
printf("error!");
}
else if (sqlca.sqlcode == 1403)
{
break;
}
printf("Id=%s Name=%s \n",id,name);
}
EXEC SQL CLOSE stu_cursor;
EXEC SQL COMMIT WORK RELEASE;
printf("Disconnect!\n");
return 0;
}
bash-3.1# proc ok.pcPro*C/C++: Release 10.2.0.1.0 - Production on Fri May 2 10:26:48 2008Copyright (c) 1982, 2005, Oracle. All rights reserved.System default option values taken from: /usr/local/ora//precomp/admin/pcscfg.cfg
bash-3.1# gcc -o ok ok.c /usr/local/ora/lib/libclntsh.so
bash-3.1# ./ok <ERROR> Error while trying to retrieve text for error ORA-12514代码如下:
#include "/usr/local/ora/precomp/public/sqlca.h"#ifndef ORA_PROC#include <stdio.h>
#include <string.h>
#include <stdlib.h>#endif void sql_error(char *msg)
{
printf("\n%s %s\n", msg,(char *)sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(0);
}int main()
{
EXEC SQL INCLUDE sqlca;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL WHENEVER SQLERROR DO sql_error(" <ERROR> ");
EXEC SQL BEGIN DECLARE SECTION;
char oraCN[50];
char name[25];
char id[3];
EXEC SQL END DECLARE SECTION;
memset(oraCN, 0, 50);
strcpy(oraCN,"train22/train22@//192.168.135.227:1521/orcl;");
/* oraCN.len = strlen(oraCN.arr);
oraCN.arr[oraCN.len] = '\0';*/
EXEC SQL CONNECT :oraCN;
printf("Connect!\n");
EXEC SQL DECLARE stu_cursor CURSOR FOR
SELECT bank_code,bank_name from par_bank WHERE IS_JW = 1;
printf("DECLARE CURSOR OK!\n");
EXEC SQL OPEN stu_cursor;
if(sqlca.sqlcode == 0)
{
printf("OPEN CURSOR OK!\n");
}
else {
printf("open err![%d]", sqlca.sqlcode);
}
while(1)
{
EXEC SQL FETCH stu_cursor INTO :id,:name;
if(sqlca.sqlcode != 0 && sqlca.sqlcode != 1403)
{
printf("error!");
}
else if (sqlca.sqlcode == 1403)
{
break;
}
printf("Id=%s Name=%s \n",id,name);
}
EXEC SQL CLOSE stu_cursor;
EXEC SQL COMMIT WORK RELEASE;
printf("Disconnect!\n");
return 0;
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货