A
在进行pro*c程序开发的时候,要配置/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/admin下的pcscfg.cfg。
接着生成.out文件。
注意一个错误1:
出现上面的错误的原因是没有引入共享库,要按照下面的方式执行:
gcc dm01_hello.c -o dm01_hello
-I/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/public -L/home/oracle_11/app/oracle/product/11.2.0/db_1/lib –lclntsh
上面的是引入clntsh.so这个共享库
注意错误2:
[oracle@localhost day03]$ ./dm01_hello
hello....
serverid:scott/123456@orcl
EXEC SQL connect:err, -12541
可以通过下面的命令查看错误原因:
oerr ora 12541
(这个错误是因为监听未启动)
这时候要:
sqlplus /nolog
conn /as sysdba
startup
quit
在执行:
lsnrctl start
(可以通过ps –u oracle命令查看oracle相关启动服务)
再执行的时候就不会出现错误了。
#include <stdio.h>
#include <string.h>
#include <string.h>
#include "sqlca.h"
//定义宿主变量 serverid
EXEC SQL BEGIN DECLARE SECTION
;
char *serverid = "scott/123456@orcl";
int deptno;
char dname[20];
char loc[20] ;
int deptno2;
char dname2[20];
char loc2[20] ;
EXEC SQL END DECLARE SECTION;
//获取
int main()
{
int ret = 0;
printf("hello....\n");
//在C中是宿主变量
printf("serverid:%s \n", serverid);
//嵌入式SQL语言必须要以 EXEC SQL开头
//:serverid
EXEC SQL connect :serverid;
if (sqlca.sqlcode != 0)
{
ret = sqlca.sqlcode;
printf("EXEC SQL connect:err, %d\n", ret);
return ret;
}
printf("connect ok\n");
deptno = 50;
strcpy(dname, "50name");
strcpy(loc, "50loc");
EXEC SQL select deptno, dname, loc into :deptno2, :dname2, :loc2
from dept where deptno=:deptno;
printf("%d, %s, %s\n", deptno2, dname2, loc2);
EXEC SQL COMMIT RELEASE; //提交事务断开连接
return ret;
}