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

阅读: 评论:0

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

记录创建并运行第一个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;

本文发布于:2024-02-04 22:56:43,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170718279360493.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:第一个   程序   Pro
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23