高手帮忙 调试执行如下:
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;
}