dbfun.sqc文件:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sql.h>
#include <sqlda.h>
#include <sqlca.h>EXEC SQL INCLUDE SQLCA;EXEC SQL BEGIN DECLARE SECTION;
char sDBUser[50];
char sDBPawd[50];
char sDBName[50];
char sDBConn[200];
char s_name[10];
EXEC SQL END  DECLARE SECTION;/************************************************************************       
 FUNC:   int db_connect(void)                                                   
 PARAMS: 无                                                                     
 RETURN:  0:成功                                                               
         -1:失败                                                               
 DESC:   连接数据库                                                             
****************************************************************************/
int db_connect(void)
{
  char *p;
  int iLen;
  if (NULL == getenv("DBUSER"))
  {
    printf("get DBUSER failed\n");
    return -1;
  }
  if (NULL == getenv("DBNAME"))
  {
     printf("get DBNAME failed\n");
     return -1;
  }
  if (NULL == getenv("DBPAWD"))
  {
     printf("get DBPAWD failed\n");
     return -1;
  }
  
  strcpy( sDBUser, getenv("DBUSER"));
  strcpy( sDBName, getenv("DBNAME"));
  strcpy( sDBPawd, getenv("DBPAWD"));   p = sDBConn;
  iLen=0;
  iLen=strlen( sDBUser);
  strncpy( p, sDBUser, iLen);
  p = p+iLen;
  memset( p++, '/', 1);
  iLen=strlen( sDBPawd);
  strncpy( p, sDBPawd, iLen);
  p = p+iLen;
  memset( p++, '@', 1);
  iLen=strlen( sDBName);
  strncpy( p, sDBName, iLen);
  p = p+iLen;
  memset( p, 0, 1);
  EXEC SQL CONNECT :sDBConn;   if (sqlca.sqlcode != 0)
  {
     printf("connect oracle failed\n");
     return -1;
  }  
  printf("connect oracle success\n");
  memset( s_name, 0, sizeof( s_name));
/*
    EXEC SQL select srv_name into 
    :s_name 
     from cfs_srvinf 
     where srv_id='1001';
    printf("sqlcode=[%d], s_name=[%s]\n", sqlca.sqlcode, s_name);
*/

    exec sql commit work release;

  return 0;
}int main()
{
  db_connect();
}makefile文件:
objo = dbfun.c
objc = dbfun.sqc 
cmd = ${APPHOME}/bin/dbfun
$(cmd):$(objo)
cc -o $(cmd) $(objo) -I ${ORACLE_HOME}/precomp/public -L ${ORACLE_HOME}/lib -l clntsh
-rm *.lis
#$(objo):structtst.h
$(objo):$(objc)
proc userid=${DBUSER}/${DBPAWD}@${DBNAME} $(objc)
.PHONY:clean
clean:
-rm $(cmd) $(objo) *.lis
我编译后运行,如果红色部分注释掉,编译通过,执行成功,输出:connect oracle success
如果将红色部分的注释去掉,编译失败,报错:
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.System default option values taken from: /home/sawei/app/sawei/product/11.2.0/client_1/precomp/admin/pcscfg.cfgError at line 81, column 5 in file dbfun.sqc
    EXEC SQL select srv_name into 
....1
PLS-S-00000, SQL Statement ignored
Semantic error at line 81, column 5, file dbfun.sqc:
    EXEC SQL select srv_name into 
....1
PCC-S-02346, PL/SQL found semantic errors
make: *** [dbfun.c] 错误 1
求指教,另外我的pcscfg.cfg的配置如下:
sys_include=($ORACLE_HOME/precomp/public,/usr/include,/usr/lib/gcc/i386-redhat-linux/4.1.1/include,/usr/lib/gcc/i386-redhat-linux/3.4.5/include,/usr/lib/gcc-lib/i386-redhat-linux/3.2.3/include,/usr/lib/gcc/i586-suse-linux/4.1.2/include,/usr/lib/gcc/i586-suse-linux/4.3/include)
ltype=short
code=ANSI_C
cpp_suffix=c
parse=none
SQLCHECK=SEMANTICS