问题标签 [oracle-pro-c]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
visual-studio-2012 - 为什么 Pro*C/C++ Oracle 预编译器无法解析 windows.h 头文件?
我正在使用 MSVC Ultimate 2012 开发 Windows Server 2008 R2 Standard (SP1)。我正在尝试为 64 位平台编译一个“C”项目(但似乎问题与目标无关)。该项目包含一个 *.pc 文件,该文件必须通过 Pro*C/C++ 预编译器进行预编译。问题是,我无法预编译该文件。解析 windows.h 头文件时预编译失败。请帮忙!!!
更多细节:
1) 源文件:我的my.pc文件开头如下:
注意:第一个#include <windows.h>
足以用于错误调用。
2) 配置文件:默认pcscfg.cfg文件为空,项目配置文件my.cfg如下:
注意:d:\Progra~1\Micros~2.0\VC\include = D:\Program Files\Microsoft Visual Studio 10.0\VC\include, c:\Progra~2\WI3CF2~1\8.0\Include\um = C :\Program Files (x86)\Windows Kits\8.0\Include\um, c:\Progra~2\WI3CF2~1\8.0\Include\shared = C:\Program Files (x86)\Windows Kits\8.0\Include\共享,$PROC11_ORACLE_HOME = d:\oracle\product\11.2.0\client_2。这些路径可以找到所有需要的头文件。
3) 命令行:我在自定义构建工具/常规选项中为 my.pc 文件定义了以下命令行:
注意:$(MSDEV_HOME) = D:\Program Files\Microsoft Visual Studio 10.0.
4) 平台: MSVC 平台设置为 x64,但我在 Win32 上也获得了类似的结果。
5) 错误信息:如果my.cfg文件中涉及define=_WIN64,预编译时收到错误信息:
6) 错误消息:如果my.cfg 文件中不涉及 define=_WIN64,则在预编译期间收到错误消息:
7) 文件 vadefs.h: vadefs.h 头文件中的关键行如下所示:
问题是,为什么标准 Microsoft 头文件中的预编译失败。宏中可能有一些混乱,例如与_WIN64 相关的东西?或者我应该在配置文件中添加另一个宏吗?我已经阅读了很多讨论,但没有进展。任何想法将不胜感激!
c++ - 是否可以在没有数据库的情况下编译 Oracle Pro*C(跳过语义检查)?
我支持 35+ 个版本的产品的开发服务器。每个版本可能没有相同的数据库架构,因此传统上我们必须支持每个版本的 Oracle 实例,以便开发人员构建 Pro*C 库。
现在版本数量太多,无法支持单个 Linux 服务器上的单个数据库实例。所以我想知道这些方法中的任何一种都是可能的。
1) 在没有语义检查的情况下编译 Pro*C 代码 (.pc .pcc) (我知道这对于发布版本很危险,但对于快速测试版本,开发人员不需要等待我为他们提供新服务器)2)有一台具有 35 个以上数据库实例的服务器,仅包含元数据
如果我可以禁用语义检查但没有成功,我搜索了很多地方。我尝试在一台 Linux 服务器上配置多个实例,但每个实例都使用大量内存,因此拥有 35 个以上的实例是不可能的。
非常感谢任何聪明的技巧和建议。
谢谢,
泰恩
c - 在 Pro*C 中处理浮点数
我有一个带有 NUMBER 类型列的 Oracle 表,其中包含一系列浮点数。使用 Pro*C 将其读入 C 变量的正确方法是什么?我尝试了以下方法:
更常见的是,这不是很好,但是一些浮点数,特别是那些真正接近 0(例如 1.4E-43)的浮点数会导致以下错误:
是否有一种正确/安全的方式来读取这样的值,或者有一种方法可以让 oracle 足够安全地转换类型,从而导致精度损失?
oracle - Pro*C 编译器的机制
我是 Pro*C 的新手。我读到 Pro*C 编译器将你的 .pc 文件编译成 .c (这仍然是一个源文件),当我打开 .c 时,我发现所有的结构都写在里面。Pro*C 编译器是否只编译我认为不正确的 EXEC SQL 语句。那么所有的 printfs 都去哪儿了?它们都被转换成结构了吗?
oracle - 使用 GNU autotools 进程和 Oracle Pro C 预处理器
我正在将一些库转换为 GNU 自动工具,并且很难集成 Oracle Pro C 预处理器。
工作流程如下:
.pc => .c => o. => .so/.a/binary
我无法在 automake 手册中找到如何在构建过程中添加额外的前置步骤的任何提示。我试图修改SOURCES=file.pc
,但 autoreconf 抱怨缺少 C 文件。我已经添加SUFFIXES = .pc .c .o
和
但是目标被忽略了——如果直接调用$<
就永远不会被解析。
该怎么办?
c - 如何在 Linux 上编译在 Solaris 上编译和运行良好的“C”应用程序?
我正在尝试在 Linux 上编译和运行一个在 Solaris 上完美运行的“C”应用程序。我首先尝试只复制在 Solaris 上编译的二进制文件并在 Linux 上运行,但这给了我一个错误,说cannot execute binary file
. 因此,我尝试首先在 Linux 上使用用于在 Solaris 上编译它的相同 Makefile 编译代码。Makefile的内容如下:
通过使用上面的 Makefile,我在代码中遇到了如下所述的错误:
更新:
后来我在文件中包含了一个头文件,global.ec
错误减少到以下内容:
注意:错误是在 .c 文件中报告的,但它们实际上是 .ec 文件。
global.ec 的简化版
有人在这里问过类似的问题,被接受的回答是使用GNU Autoconf。但我觉得在我的情况下,Makefile 中的一些更改或通过添加一些丢失的头文件可以使它工作,因为一切都在 Solaris 上工作。我还在 StackOverflow 上找到了类似的帖子,人们建议使用像 GDB 这样的调试器。在我的情况下使用 GDB 会有所帮助吗?
请帮助我,因为我对此很陌生。
c - Oracle Pro*C 预编译器错误 PCC-S-02201:遇到符号“_Bool”
现有程序正在从 AIX 转换为 RedHat Linux。Oracle Pro*C 在预编译时会导致问题。编译错误发生cursesh.h
在bool
typedef
.
预编译配置:
包含路径与 gcc 编译器路径匹配。
请帮助我解决编译错误。我是否需要包含任何其他预处理器符号或缺少任何内容sys_include
?
PCSCFG.CFG:
sql - Oracle Pro*C -- 分段错误(核心转储)
我正在自学 Pro*C,这是一个通过数据库中的记录进行游标的程序,它可以编译并运行。它甚至提示“输入Guest_ID(类型退出以终止)>>”。之后,如果输入整数,则会出错为“分段错误(核心转储)”。如果输入一个字符串,它似乎会立即进入外部 for 循环内的条件
并打印“BYE”然后退出。由于我仍然熟悉变量是如何声明和从 SQL 中输入的,因此我不确定哪些声明对于此处的故障排除可能至关重要,因此我将代码保留在此处。
我确定我犯了一些简单的错误,但我没有发现任何对搜索有帮助的东西。我在服务器上运行它,并且我没有得到任何调试(这是迄今为止我无法解决的唯一主要错误),所以你所拥有的就是我所拥有的。通常C程序会在调试器中运行,但这是Pro C,我对整个Oracle Pro C调试的东西有点迷失(因为它在远程数据库上运行)。对于这种错误,我通常会怀疑没有正确分配内存,但我在这里看不到类似的东西。
经历了这些但没有帮助:
c - Oracle Pro*C——在嵌套循环中使用游标
我正在自学 Pro*C,并且有一个程序可以(据说)使用游标遍历数据库中的记录,然后编译并运行。问题是当变量打印(使用光标读入的变量)时,我得到了内存中的任何垃圾。
我尝试以几种不同的方式拆分sql exec语句,但这没有帮助。还尝试在不同的地方打开和关闭sql,也无济于事。我真的处于一个漫长的调试过程的最后,我很确定我正在犯一个非常新手的错误。如果这里的任何 Oracle 程序员不介意花一点时间,我真的很想在这里得到一些关于如何回到正轨的反馈。
它应该打印:
它实际上打印:
我觉得我完全弄乱了光标,但我无法准确指出问题出在哪里,因为我仍然习惯于如何在 Pro*C 中声明和使用变量。此外,C 程序通常会被调试,但这是在远程服务器上运行的,调试非常有限,甚至没有 dbx 命令。
编码:
通常C程序会在调试器中运行,但这是Pro C,我对整个Oracle Pro C调试的东西有点迷失(因为它在远程数据库上运行)。
经历了这些但没有帮助:
我被告知应该以不同的方式声明 VARCHAR 变量,但其他方式似乎会引发错误。
sql - Pro*C Oracle -- 循环通过 sql fetch
我从 Pro*C 开始,并且有一个程序可以读取记录并按识别值(客人)分组打印出来。为了打印所有信息,我使用了 for 循环中的一个 break 来控制去哪里。它可以编译,但没有遵循打印方案,实际上进入了无限循环。最后的最后一个中断是停止无限循环,并且由于某种原因它没有达到任何条件(即使是默认的 else)。它正在执行的远程数据库服务器上的调试有限(dbx 不可用)。
虽然不是光标结尾(即 sqlcode = 0) 如果 PrevSaleItem Not = Cursor.Item_ID 写入项目的小计 初始化 ItemQty 和 ItemTotal 为 0 将 PrevSaleItem 设置为 Cursor.Item_ID 如果打印输出详细信息行结束 添加 Cursor.Quantity 到 ItemQty 添加Cursor.calc_tax 到 ItemTotal 和 GuestTotal 获取光标中的下一条记录 End While 打印最后一项的小计 打印总计
The logic that should be happening is as follows
:
假设中断机制位于外部 for 循环(未显示)内。它应该打开光标,获取第一条记录,然后打印客人和销售项目的标题。然后它通过设置值来初始化总计和中断变量。虽然不是光标的结尾(sqlcode 为 0,而不是 while 仅用于带中断的循环)如果前一个项目!= 项目 id,则它打印小计,将项目数量和总计初始化为 0,并将前一个项目设置为项目id (然后打破 if 条件)。项目数量按表中的数量增加,并calc_tax
添加到项目和客人总数中。获取下一条记录,打印最后一项的总计,然后打印该客人的总计。
它没有打印应该在的位置并且处于无限循环中,并且在我尝试在所有条件中中断之后,我无法解释它是如何发生的。我确信这是一个初学者的错误,所以也许一个 jr Oracle 开发人员(但专业人士会很棒)有时间让我回到正轨。