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
#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
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货