问题标签 [occi]

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 投票
2 回答
1823 浏览

c++ - oracle::occi::ResultSet::next() 使我的程序崩溃

我有一个在 Windows 7 上运行的 64 位 C++ 服务器应用程序,当它在数据库上进行选择并在结果集上调用 next() 时,进程简单地死掉,在 ResultSet->next( )。数据库上的写入工作没有问题,读写都在 32 位版本上工作

我正在使用即时客户端和 SDK 附带的 11.2 版本的 win64 oracle 库

编辑:这是最简单的代码

IRecordSet 只是 DB 驱动程序常用功能的接口,如 next、getField,在此处实现

其中 m_pResultSet 是 oracle::occi::ResultSet*

0 投票
1 回答
1628 浏览

c++ - 如何使用矢量在 OCCI 中设置数据缓冲区?

我有一个名为 mytable2 的简单表,只有一列,名称为 varchar2(20)。我现在有一个存储为 std::string 向量的名称列表,要插入到表中。我想使用 executeArrayUpdate,所以我必须先执行 setDataBuffer。但是,正如我所见,人们总是使用 char[][20] 来设置数据缓冲区。

这让我很头疼,因为我这里有两个问题,第一个是将向量转换为数组,第二是将字符串转换为字符。

第一,我厌倦了使用 char[20] 的向量,这不能编译。谷歌搜索,他们说向量不能接受 char[],所以我将 std::string 的向量更改为 char* 的向量。

第二,我尝试使用“void* p=&names[0]”将向量转换为数组,正如有些人所说的那样,我们可以将向量用作数组。

我使用了stmt->setDataBuffer(1,mystring,OCCI_SQLT_STR,20,NULL),程序编译执行正常,但是当我“从mytable2中选择名称”时,它只显示了一些奇怪的字符。

以前有人遇到过类似的问题吗?我该怎么办?

我的代码很简单,如下所示:

0 投票
1 回答
1324 浏览

c++ - 我哪里错了?为 DATE 设置数据缓冲区

我想使用以下代码在 oracle 中为 DATE 进行数组获取。它可以正常编译并正确导出所有其他数据类型,但 DATE 类型除外。该程序说“ora-32146 无法在空日期执行操作”。

任何人都可以看到我错在哪里?

0 投票
1 回答
5991 浏览

c++ - 在 Linux 中使用 g++ 进行 OCCI 编译

我正在尝试使用 OCCI 库编译一个基本程序。

编译任务OK。

输出OK,生成test.o。但是,当我想链接目标文件时,使用以下命令,

链接任务失败,输出为:

我的环境简历:

  • Ubuntu Linux 11.04
  • gcc 版本 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)
  • ORACLE_HOME = /opt/oracle/product/10.2.0/db_1
  • LD_LIBRARY_PATH = /opt/oracle/product/10.2.0/db_1/lib
  • 甲骨文版本:10.2.0

你能帮我吗?,我真的需要在 Linux 中使用 OCCI 创建到 Oracle 的连接,我不想使用 Pro*C。

0 投票
1 回答
2559 浏览

c++ - OCCI C++ 应用程序的 Visual Studio 调试运行时错误

我正在使用 Visual Studio 开发一个使用 OCCI 查询 Oracle 11g 数据库的 C++ 程序。目前这是一个非常简单的程序,只进行一次查询,但我一直遇到运行时错误。我首先尝试在 VS2010 中开发这个,下载 11.2.0.3 OCCI 文件,我得到一个与不在 oci.dll 中的 heap-alloc 过程的入口点相关的错误。我的印象是这个错误可能是因为我的 Oracle 客户端是 11.2.0.1。

由于出于支持原因无法将客户端升级到更高版本,我决定回退到使用 Visual Studio 2005,因为我在 Oracle 的 OCCI 文档中读到 vc8 版本的 OCCI 库和 DLL 已经安装在 11g 中客户。所以我将我的 C++/OCCI 程序移到 VS 2005,现在我得到一个不同的调试运行时错误:一个错误消息框说“应用程序无法正确初始化”,并且来自 VS 输出窗口中加载程序的消息说“ldrpWalkImportDescriptor () 未能探测 [ORACLE CLIENT DIR]\oci\lib\msvc\vc8\oraocci11d.dll 的清单,ntstatus 0xc0150002" 我没有看到 oraocci11d.dll 的清单文件,所以我很茫然如何解决这个问题。任何更精通 OCCI 的 VS 设置的人可以提出建议吗?提前致谢...

谢尔顿

0 投票
4 回答
1801 浏览

c++ - 使用 OCCI 在 Oracle Database 11g 中存储无符号 64 位整数的最佳方法

我使用的是 11.2 版本,并且在表字段中没有直接支持 uint64。你建议在性能方面做什么?它必须是主键。

谢谢

0 投票
1 回答
1199 浏览

c++ - 如何在 ORACLE DB 的结果集中返回空字符串(使用 sys_refcursor)

遇到问题后:

ORA-32108: 未指定最大列或参数大小

我研究了一下,发现了这两个问题:为什么 Oracle 9i 将空字符串视为 NULL?Oracle 不区分空字符串和空字符串?.


这些问题解释了我得到的错误。但这让我想到了下一个问题——如何在 Oracle 的 ResultSet 中将空字符串作为字段值返回?


到目前为止,我所拥有的是:

  • 创建语句
  • 将输出参数注册为oracle::occi::OCCICURSOR
  • execute该声明
  • 我调用GetCursor使用返回的结果集

由于execute上述错误,失败。

那么,如何在结果集中返回这样的字段,其值为空字符串('')?

换句话说,我不知道如何应用此处指定的操作-它是服务器端的吗?或者我应该在我的代码中添加一些东西?或者在存储过程中,返回这个结果集?


我使用 OCCI(Oracle C++ 调用接口)。我当前的解决方法是返回一个包含单个空格 ( ' ') 的字符串,但我不喜欢它。

0 投票
0 回答
294 浏览

oracle - OCCI getString 超过 16 个字节 - 访问冲突

我正在使用 OCCI 连接到 Oracle 数据库。当我打电话时:

我收到 16 个字节或更多,存在访问冲突。

我在任何网站上都找不到答案。有谁知道为什么会这样?

0 投票
1 回答
889 浏览

oracle-call-interface - 使用 OTL (OCCI, OCI) 将二进制数据插入 Varchar2

如何使用 OTL 将可能是二进制的数据插入 Varchar2?(OCI/OCCI 当然可以)

背景:我们有很多 Varchar2 列,它们通常不是二进制的,但有一天可能会发生(我特别关心 \0 和 UTF-8)

星期二:我发布了这个相关问题: 如何在 Oracle Varchar2 中存储字节,并将 ASCII 视为文本

0 投票
2 回答
2899 浏览

c++ - 显示简单 Oracle 查询字符串时出现“访问冲突”错误(VS10 Exp C++)

我正在努力解决有关使用 occi 通过 C++ 向 Oracle 数据库运行 SQL 语句的问题。我的代码如下:

显示的错误是:

MyDatabaseApp.exe 中 0x1048ad7a (msvcp100d.dll) 处的未处理异常:0xC0000005:访问冲突读取位置 0xccccccd0。

我的程序在以下代码行的“xstring”内停止:

如果我将查询更改为:

和循环语句:

它工作正常,没有错误。我认为这是因为获取整数只是返回一个原语,但是当一个对象被返回时它会爆炸(我认为是析构函数,但我不确定为什么......)

我今天已经玩了几个小时了,我很困惑。

关于我的系统的一些信息:

  • 操作系统 - Windows XP
  • 甲骨文版 - 10g
  • IDE - Microsoft Visual Studio 2010 Express C++

我的项目属性如下:

  • C/C++ - 常规 - 附加包含目录 = C:\oracle\product\10.2.0\client_1\oci\include;%(AdditionalIncludeDirectories)
  • C/C++ - 代码生成 - 多线程调试 DLL (/MDd)
  • 链接器 - 常规 - 附加库目录 = C:\oracle\product\10.2.0\client_1\oci\lib\msvc\vc8;%(AdditionalLibraryDirectories)
  • 链接 - 输入 - 附加依赖项 = oraocci10.lib;oraocci10d.lib;%(AdditionalDependencies)

我希望我没有对太多信息感到困惑......任何帮助或见解都会很棒,在此先感谢!

编辑如果我重写循环,将值存储在局部变量中,则在循环结束时抛出错误: