记录创建并运行第一个Pro*C/C++程序

1、Pro*C/C++简介

Pro*C/C++是Oracle为应用开发人员所提供的许多预编译工具之一,通过使用Pro*C/C++可以在高级编程语言中内嵌SQL语句和PLSQL块。

2、程序编写,命名文件为demo.pc

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>

void main()
{
	char sname[10],sbirth[10],sno[10];
	char username[10] = "trade", password[10] = "hs0915", server[10] = "trade1";
	
	EXEC SQL CONNECT :username IDENTIFIED BY :password USING :server;

	printf("input student number :");
	gets(sno);
	
	EXEC SQL SELECT :sname,:sbirth from student where sno =:sno;
	printf("sname :%s  sbirth :%s \n",sname,sbirth);

	EXEC SQL COMMIT RELEASE;
}

3、终端编译生成.c文件:

 proc mydocment/demo.pc

此处编译报错如下:

[oracle@MyRhel ~]$ proc mydocment/demo.pc

Pro*C/C++: Release 11.2.0.1.0 - Production on Fri Jul 14 09:50:19 2023

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

System default option values taken from: /home/oracle/oracle/product/11020/precomp/admin/pcscfg.cfg


INTERNAL ERROR: Failed assertion [PGE Code=90105]
 

原因是,要生成.c文件,但是没有该目录下权限,查看目录结果如下:

修改文件所属用户获得用户权限如下:

sudo chown -R oracle:dba mydocment/

再次编译,成功:

[oracle@MyRhel ~]$ proc mydocment/demo.pc

Pro*C/C++: Release 11.2.0.1.0 - Production on Fri Jul 14 11:01:21 2023

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

System default option values taken from: /home/oracle/oracle/product/11020/precomp/admin/pcscfg.cfg

可以在目录下看到已经生成的.c文件:

 4、编译转换后的源程序demo.c

编译报错: 

mydocment/demo.c:146:19: error: sqlca.h: No such file or directory
mydocment/demo.c: In function 'main':
mydocment/demo.c:164: error: 'sqlca' undeclared (first use in this function)
mydocment/demo.c:164: error: (Each undeclared identifier is reported only once
mydocment/demo.c:164: error: for each function it appears in.)

解决方法: 

报错:发现是把命令写错了-l(为了区分,它的大写为L)应该换成-I(其小写为i),还是在写的时候太过粗心了啊

修改之后的编译命令:

cc -g -o mydocment/demo mydocment/demo.c -I${ORACLE_HOME}/precomp/public -L$ORACLE_HOME/lib/ -lclntsh

编译警告,在主函数的211行,提示使用 gets 函数时传递的参数类型不正确。gets 函数不安全且容易引发缓冲区溢出的问题,因此在许多标准库中已被标记为不推荐使用。

/tmp/ccqronXC.o: In function `main':
/home/oracle/mydocment/demo.c:211: warning: the `gets' function is dangerous and should not be used.

把源代码中的键盘输入函数gets换成fgets:

fgets(sno, 10, stdin);//原来为gets(sno)

重新编译成.c并编译链接成可执行文件成功!

5、进入文件目录运行可执行文件

./demo

成功!

注意:在编译.pc文件前,需要将数据库用户scott解锁。即登录sysdba,输入:

alter user scott indentified by password account unlock;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值