问题标签 [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.

0 投票
1 回答
3912 浏览

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 相关的东西?或者我应该在配置文件中添加另一个宏吗?我已经阅读了很多讨论,但没有进展。任何想法将不胜感激!

0 投票
0 回答
1241 浏览

c++ - 是否可以在没有数据库的情况下编译 Oracle Pro*C(跳过语义检查)?

我支持 35+ 个版本的产品的开发服务器。每个版本可能没有相同的数据库架构,因此传统上我们必须支持每个版本的 Oracle 实例,以便开发人员构建 Pro*C 库。

现在版本数量太多,无法支持单个 Linux 服务器上的单个数据库实例。所以我想知道这些方法中的任何一种都是可能的。

1) 在没有语义检查的情况下编译 Pro*C 代码 (.pc .pcc) (我知道这对于发布版本很危险,但对于快速测试版本,开发人员不需要等待我为他们提供新服务器)2)有一台具有 35 个以上数据库实例的服务器,仅包含元数据

如果我可以禁用语义检查但没有成功,我搜索了很多地方。我尝试在一台 Linux 服务器上配置多个实例,但每个实例都使用大量内存,因此拥有 35 个以上的实例是不可能的。

非常感谢任何聪明的技巧和建议。

谢谢,

泰恩

0 投票
1 回答
902 浏览

c - 在 Pro*C 中处理浮点数

我有一个带有 NUMBER 类型列的 Oracle 表,其中包含一系列浮点数。使用 Pro*C 将其读入 C 变量的正确方法是什么?我尝试了以下方法:

更常见的是,这不是很好,但是一些浮点数,特别是那些真正接近 0(例如 1.4E-43)的浮点数会导致以下错误:

是否有一种正确/安全的方式来读取这样的值,或者有一种方法可以让 oracle 足够安全地转换类型,从而导致精度损失?

0 投票
1 回答
150 浏览

oracle - Pro*C 编译器的机制

我是 Pro*C 的新手。我读到 Pro*C 编译器将你的 .pc 文件编译成 .c (这仍然是一个源文件),当我打开 .c 时,我发现所有的结构都写在里面。Pro*C 编译器是否只编译我认为不正确的 EXEC SQL 语句。那么所有的 printfs 都去哪儿了?它们都被转换成结构了吗?

0 投票
1 回答
164 浏览

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

但是目标被忽略了——如果直接调用$<就永远不会被解析。

该怎么办?

0 投票
1 回答
1504 浏览

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 会有所帮助吗?

请帮助我,因为我对此很陌生。

0 投票
1 回答
9474 浏览

c - Oracle Pro*C 预编译器错误 PCC-S-02201:遇到符号“_Bool”

现有程序正在从 AIX 转换为 RedHat Linux。Oracle Pro*C 在预编译时会导致问题。编译错误发生cursesh.hbool typedef.

预编译配置:

包含路径与 gcc 编译器路径匹配。

请帮助我解决编译错误。我是否需要包含任何其他预处理器符号或缺少任何内容sys_include

PCSCFG.CFG:

0 投票
1 回答
3712 浏览

sql - Oracle Pro*C -- 分段错误(核心转储)

我正在自学 Pro*C,这是一个通过数据库中的记录进行游标的程序,它可以编译并运行。它甚至提示“输入Guest_ID(类型退出以终止)>>”。之后,如果输入整数,则会出错为“分段错误(核心转储)”。如果输入一个字符串,它似乎会立即进入外部 for 循环内的条件

并打印“BYE”然后退出。由于我仍然熟悉变量是如何声明和从 SQL 中输入的,因此我不确定哪些声明对于此处的故障排除可能至关重要,因此我将代码保留在此处。

我确定我犯了一些简单的错误,但我没有发现任何对搜索有帮助的东西。我在服务器上运行它,并且我没有得到任何调试(这是迄今为止我无法解决的唯一主要错误),所以你所拥有的就是我所拥有的。通常C程序会在调试器中运行,但这是Pro C,我对整个Oracle Pro C调试的东西有点迷失(因为它在远程数据库上运行)。对于这种错误,我通常会怀疑没有正确分配内存,但我在这里看不到类似的东西。

经历了这些但没有帮助:

C 中的分段错误(核心转储)运行时错误

不太有用的错误——家庭作业中的分段错误(核心转储)

分段错误(核心转储)

从标准输入读取的分段错误(核心转储)

0 投票
2 回答
5124 浏览

c - Oracle Pro*C——在嵌套循环中使用游标

我正在自学 Pro*C,并且有一个程序可以(据说)使用游标遍历数据库中的记录,然后编译并运行。问题是当变量打印(使用光标读入的变量)时,我得到了内存中的任何垃圾。

我尝试以几种不同的方式拆分sql exec语句,但这没有帮助。还尝试在不同的地方打开和关闭sql,也无济于事。我真的处于一个漫长的调试过程的最后,我很确定我正在犯一个非常新手的错误。如果这里的任何 Oracle 程序员不介意花一点时间,我真的很想在这里得到一些关于如何回到正轨的反馈。

它应该打印:

它实际上打印:

我觉得我完全弄乱了光标,但我无法准确指出问题出在哪里,因为我仍然习惯于如何在 Pro*C 中声明和使用变量。此外,C 程序通常会被调试,但这是在远程服务器上运行的,调试非常有限,甚至没有 dbx 命令。

编码:

通常C程序会在调试器中运行,但这是Pro C,我对整个Oracle Pro C调试的东西有点迷失(因为它在远程数据库上运行)。

经历了这些但没有帮助:

oracle嵌套游标的奇怪行为

Oracle ProC 插入值((选择 ...))

Oracle Pro*C 使用游标更新表失败

我被告知应该以不同的方式声明 VARCHAR 变量,但其他方式似乎会引发错误。

0 投票
1 回答
1349 浏览

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 开发人员(但专业人士会很棒)有时间让我回到正轨。