问题标签 [oracle-call-interface]

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 投票
3 回答
1155 浏览

c++ - 在 ORACLE 中插入查询 usjng OCI(c++) 的问题

问题陈述:- 如果数据库中已经存在该记录(重复==>主键存在),我将向 Oracle 中插入一条记录,我想用新记录更新它。

目前在插入记录时解决这个问题,如果我得到 OCI_ERROR 然后我打电话

OCIErrorGet( (dvoid *)errhp, (ub4) 1, (text *) NULL, &errcode,errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);

然后我检查 errbuf 错误 buf 的值是否为 ORA-00001 ==> 如果存在违反唯一约束然后我更新值

有没有办法做同样的事情,除了在数据库中搜索记录,如果该记录已经存在更新它我不想这样做,因为我将不得不为此编写代码

如果值在 ORACLE 中重复,是否会产生任何特定错误?

有什么建议么?

0 投票
6 回答
7216 浏览

c++ - 如何检测 Oracle 断开/停滞的连接?

在我们的服务器/客户端设置中,我们遇到了一些奇怪的行为。客户端是一个 C/C++ 应用程序,它使用 OCI 连接到 Oracle 服务器(使用OTL库)。

数据库服务器时不时地以某种方式死机(是的,这是核心问题,但从应用程序端我们无法解决它,但无论如何都必须处理它),机器不再响应新请求/connections 但现有的,如 Oracle 连接,不会丢失或超时。发送到数据库的查询再也不会成功返回。

Oracle 提供了哪些可能性(如果有)来检测来自客户端应用程序端的这些停滞连接并以或多或少安全的方式进行恢复?

0 投票
2 回答
5663 浏览

oracle - ora-01406 使用 OCI 获取值时出错

当将最大长度为 50 的值提取到只能容纳 30 个字符的缓冲区时,会发生这种情况。

我已经查找了错误并找到了一个可能的解决方案,即扩展该值绑定到的缓冲区的大小。

问题是,这仅发生在我们的某些系统中,而不会发生在其他系统中。Oracle版本与此有关吗?如果是这样,更改此错误的版本是什么?

我们使用的 Oracle 版本是 10.2.0.1 和 10.2.0.3

0 投票
2 回答
874 浏览

oracle - oopen 游标是只进的还是只读的?

使用 oopen(来自 Oracle 7.x OCI api)创建的游标是只进和只读的吗?

谢谢,
埃里克

0 投票
3 回答
1285 浏览

oracle - OCI:确定查询列的文本表示的长度

我的目标是执行查询(SELECT),获取结果并将它们输出为 text。查询作为参数给出,可以是例如select * from t

我使用OCIStmtPrepareand OCIStmtExecute,然后我可以用OCIParamGet和 系列来描述查询的列OCIAttrGet。假设我得到OCI_ATTR_DATA_TYPE其中一列的 = 12 (DATE)。Then OCI_ATTR_DATA_SIZE= 7 -- 这是内部 DATE 表示的大小。

关于当前的 NLS 设置,我想将此日期作为文本获取。为此,我使用OCIDefineByPosdty = SQLT_STR。它工作正常,但我还需要提供一个缓冲区来获取。问题是:我需要多大的缓冲区?


显然它取决于NLS_DATE_FORMAT. 我相信甲骨文知道这个价值:

这是确切的长度。只有当日期格式被 Oracle 屏蔽时(例如,通过函数),它才使用绝对最大值 (?) 值 75:

上述所有内容也适用于 NUMBER。
那么,是否可以在 OCI 中获取列的文本表示长度?

0 投票
2 回答
610 浏览

perl - Oracle 9i OCI 驱动程序能否与 Oracle 10g 服务器一起使用?

我负责使用DBD::Oracle针对 9.2.0.8 OCI 客户端编译的 Perl 应用程序。这是一个sun4u盒子,虽然是 32 位二进制文​​件。DBD::Oracle 链接到 32 位 OCI 库。我们目前正在针对 9i 服务器运行。

我们的DBA团队正计划将服务器升级到10g,即10.2.0.4。我面临两个选择:

  1. 继续对新的 10g 服务器使用 9i 驱动程序。
  2. 或者,将我们的客户端从 9.2.0.8 升级到 10.2.0.4 以匹配服务器的版本。

出于各种操作原因,我更愿意使用上面的 ( 1 )。但是,我不确定 9i OCI 客户端是否可以与 10g Oracle 服务器一起使用。这可以做到吗?

0 投票
4 回答
3362 浏览

oracle - Oracle OCI:使用日期字段查询

使用OCI编译的客户端:10.2.0.4.0
服务器:Oracle9i Enterprise Edition Release 9.2.0.4.0

有问题的查询是:

表说明:

看起来很简单,当使用 SQLPlus 直接在服务器上执行时,它会返回一个结果,但是当从使用 OCI 的应用程序中执行时,此查询会返回OCI_NO_DATA always。一开始,日期值也是一个占位符,但我发现即使给出一个字面值'05-JUL-08'也不起作用。我尝试了以下方法:

  • 我已经尝试了基础知识:从客户端查询数据库确实有效。就是这个给我带来麻烦
  • 以下确实有效:

    /li>
  • ALTER SESSION SET NLS_DATE_FORMAT="DD-MM-YYYY";在服务器和客户端的查询之前执行。结果相同:服务器返回数据,客户端OCI_NO_DATA

  • 尝试更改DATE_PROC格式,将其与TO_DATE(). 结果相同。
  • 搜索,搜索,搜索。没有答案

我有点急于找到答案,希望得到任何帮助,并可以根据需要提供更多详细信息。谢谢。

---更多信息---

我使用 trunc() 和“alter session set nls_date_format”尝试了不同的组合......这就是我得到的:

在服务器中:返回:“BancoOne”(良好的价值)
在 OCI 应用程序中:返回 OCI_NO_DATA

在服务器中:返回:“BancoOne”
在 OCI 应用程序中:返回“BancoOne”

所以关键是,如果 OCI 应用程序都访问同一个数据库服务器,为什么会给出不同的结果?

此外,为了澄清 OCI 应用程序的目的:它有一个由用户配置的查询。这个想法是用户将根据需要调整查询以适应目标数据库中存在的日期字段,这就是为什么我不应该在我的代码中包含“alter session set nls_date_format”语句,因为我不知道日期格式。这样我想为用户提供灵活性,而不是依赖特定的日期格式。这有意义吗?有什么建议么?

0 投票
1 回答
318 浏览

c - Oracle OCI 触发器创建

有没有办法使用 OCI API 创建触发器?

我需要以编程方式执行以下操作:

0 投票
4 回答
1337 浏览

php - PHP字符串不喜欢多个变量插入吗?

我将 PHP 5.2 与Oracle 数据库11.1 一起使用。

编码

导致此错误:

警告:oci_execute() [function.oci-execute]: ORA-00904: "COMMENTS":第159C:\IODwww\hello.php中的标识符无效 ^

但运行这个工作正常:

这是我将多个变量注入查询字符串的结果,还是我犯了其他错误?

0 投票
3 回答
12615 浏览

php - 甲骨文,PDO_OCI 与 OCI8

我工作的公司目前使用一些基本功能来抽象 OCI 库作为数据库连接的一种手段。我们正在考虑切换到 PHP 的 PDO 对象,但从一些快速搜索来看,Oracle 驱动程序似乎不如其他 PDO 驱动程序成熟。如果有人在生产环境中使用过 PDO/oci8,我将不胜感激。

谢谢!