Pro*C/C++是Oracle为应用开发人员所提供的许多预编译工具之一,通过使用Pro*C/C++可以在高级编程语言中内嵌SQL语句和PLSQL块。
#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;
}
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
|
原因是,要生成.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文件:
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并编译链接成可执行文件成功!
./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小时内删除。
留言与评论(共有 0 条评论) |