问题标签 [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 投票
1 回答
1523 浏览

qt - 在运行时检查 Qt 插件的依赖关系

这就是我所拥有的: 我的应用程序是用 Qt 4.5 静态编译的。我正在使用qsqloci插件(静态链接),它动态加载 oracle 库(oci.dll,...)。

我希望能够检查 oracle DLL 的存在,并根据结果使用插件功能。

还有问题:

  • 静态链接的插件有可能吗?
  • 如果不是,是否可以动态链接插件(应用程序的其余部分仍然与 Qt 静态链接)?
  • 如果没有,有可能吗?
0 投票
2 回答
2078 浏览

php - 从 Oracle 存储过程返回 OCI8 上的表

我正在通过 OCI8 连接到 Oracle。

我有一个存储过程:

我正在尝试使用 OCI 将其返回给 PHP:

(其余所需的 php 端 OCI 已到位。)

我得到的错误是:

警告:oci_execute():ORA-06550:第 1 行,第 7 列:PLS-00306:调用“OCIGETACCOUNTS”时参数的数量或类型错误

如何获得 $result 来容器表资源

0 投票
2 回答
394 浏览

ruby-on-rails - 无法加载 Oracle/OCI 库:RubyGem 版本错误:ruby-oci8(1.0.7 not >= 0)

显然 1.0.7 大于 0

进来并尝试使用我的 Rails 应用程序,我明白了。昨天上班。

所以我删除了 ruby​​-oci8 1.0.7 gem 并重新安装了它。同样的问题。

尝试了我的应用程序的不同开发分支和同样的问题。

我在 Windows 安装上运行 RoR 并寻找关于可能已损坏的任何想法?

0 投票
0 回答
1034 浏览

php - SLES 安装 php-oci8 而不编译整个 php/apache?

有没有办法在 Suse Linux Enterprise Server (SLES) 上安装 oracle 的 oci8-pkg 而无需下载 oci8 并用它编译 php?

最终是 zypper 或 pear 之类的安装?

怎么了最新的?

我看到了以下链接:

前两个是关于编译 php,最后一个是关于通过 pear 安装的。

怎么选?它们中的任何一个都过时了吗?

干杯

0 投票
1 回答
704 浏览

c++ - 如何从 OCIErrorGet 获取约束错误?

我们的 C++ 程序使用 Oracle 和 OCI 来完成它的数据库工作。有时,用户会触发约束冲突,我们会检测到它,然后显示来自 OCIErrorGet 的错误消息。OCIErrorGet 返回如下字符串:

我正在寻找从 Oracle 错误中提取“MYSCHEMA.CC_MYCONSTRAINT”的最简洁方法。知道约束的名称,我可以显示更好的错误消息(如果我们的代码可以访问约束名称,它可以查找非常有意义的错误消息)。

我可以使用正则表达式或其他东西并假设 Oracle 消息永远不会改变,但这对我来说似乎有点脆弱。或者我可以查找特定的 ORA 代码,然后抓取括号之间的任何文本。但我希望 OCI 有一种更简洁/更健壮的方式,如果约束失败,可以在不诉诸硬编码字符串操作的情况下找出失败约束的实际名称。

有任何想法吗?

0 投票
2 回答
13678 浏览

oracle - 使用 OCI 驱动程序的 Oracle OID 的 JDBC 连接字符串

我知道如何使用 OID 和瘦客户端 jdbc 驱动程序连接到 oracle:

但是,我无法使用 jdbc、oci 和 oid 进行连接。Oracle 不断输出无效的 URL 消息。我尝试了以下方法:

我已经为 10g 数据库设置了 ORACLE_HOME。我已将库添加到 LD_LIBRARY_PATH。我已经设置了 java.library.path 系统属性。最后,我可以使用 sqlplus 和符号 oid 名称进行连接。

应该使用什么连接字符串?

0 投票
1 回答
1437 浏览

php - ORA-12154 PHP OCI8 悲伤

使用 Oracle 的 11g XE(免费赠品)配置了 CentOS 5.6 服务器,在本指南的帮助下安装了 OCI8,并获得了与数据库通信的预先存在的(自定义)PHP 应用程序,没有任何问题。调用该服务器 Dev 并开始下一个构建。

我现在使用的 Prod 服务器与 Dev 一样,只是 Oracle 11G 是标准版,而不是免费版。其他一切,据我所知,相同。绝对是相同的 OCI RPM。

警告:ocilogon() [function.ocilogon]:ORA-12154:TNS:无法解析 /var/www/html/blah/blah.php 中指定的连接标识符

我确定我有一个“环境”问题,但我不知道如何解决它。

Oracle、Apache、OCI8 和 PHP 都在同一个盒子上。

什么有效:

  • tnsping orcl从产品服务器。
  • sqlplus user@orcl从产品服务器。
  • phpconfig();显示所有 OCI8 的东西。比较 Dev 和 Prod 的结果,它们是相同的。
  • 我还可以从 VPN 另一端的 XP 客户端通过 Toad 进行连接。

我只是无法让 PHP 与数据库对话。快把我逼疯了!

在 Prod 服务器上进行了全局搜索,只有一个 tnsnames.ora 文件。这是它的样子:

ORCL = (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED) (SERVICE_NAME = orcl)
)

我应该提供什么会有所帮助吗?只需发表评论。

真的不想在 Prod 盒子上弄平并重新开始......请帮我解决这个问题!

[编辑]
我猜它没有找到听众。出于好奇,我停止了监听服务并确认错误没有任何变化。

根据要求,这里有一些代码。

引发我上面提到的错误的代码:

变量在另一个文件中设置:

...

但我们可以跳过它。在将它们复制并粘贴到这里时,我花了一点时间来排列括号 - 并找到了一个额外的。

错字!

多哈。/掌心。

0 投票
1 回答
424 浏览

oracle - Oracle OCI - 获取延迟和失败

我有一个 Oracle OCI 程序,它在各种平台上投入生产:SLES Linux、Ubuntu、AIX、Solaris 和 HP-UX。我试图在 Redhat 上运行同样的东西,但我遇到了困难。

当使用可滚动游标(使用 调用)并使用执行二进制搜索以获得确切结果集大小的函数时,问题似乎出现OCIStmtExecuteOCI_STMT_SCROLLABLE_READONLY。更一般地说,问题似乎是在读取结果集的末尾,然后再读取 OK 值。

我编写了一个测试实用程序,它执行一个必须返回 1 行 ( SELECT COUNT(*) FROM xxx) 的简单语句。然后它从结果集中检索数据:

如果我首先检索第 1 行,它工作正常。如果我超过了结果集的末尾,当我返回时它会继续正常工作。但是如果我的第一次检查是在结果集之后,一切都会出错:

还有一个奇怪的延迟,在上面的例子中是 10 秒,而它检索应该没问题的行。在调试器中,这在 OCIStmtFetch2 函数的深处——不出所料的是在等待服务器响应的 __read_nocancel 函数中。

有没有其他人见过这个问题?

0 投票
2 回答
1531 浏览

c++ - Autotools:包括一个预建的 3rd 方库

我目前正在努力将一组 c++ 二进制文件升级为基于 Autotools 的更现代的东西,每个文件都使用自己的 Makefile 集。但是我不知道如何在构建/打包过程中包含第三方库(例如 Oracle Instant Client)。

这是我错过的非常简单的事情吗?

编辑以添加更多细节

我当前的构建环境如下所示:

今天,顶层 build.sh 执行以下步骤:

  1. 运行每个库的 Makefile 并将输出复制到 /build/lib
  2. 运行每个二进制文件的 Makefile 并将输出复制到 /build/bin

每个 Makefile 都有一组指向各个同级目录的硬编码路径。不用说,这已成为维护的噩梦。我已经开始测试自动工具,但我卡住的地方是找出相当于将 /src/lib/oci/*.so 复制到 /build/lib 以进行编译时链接和捆绑到发行版中。

0 投票
1 回答
757 浏览

oracle - 获取 varchar2 列值时是否可以动态调整缓冲区大小?

给定一个包含许多潜在大字符串的FAT行的表:

create table t (s1 varchar2(4000), ..., sN varchar2(4000))

我知道如何使用直接绑定来获取这些列,即

这种方法的问题是它需要先验地知道所有列的最大大小(描述也可以告诉我,但这需要更多的工作),而且当每个单元格中包含的数据时,它也会强制预分配许多大缓冲区在实践中要小得多。

我尝试使用分段提取,用 OCI_DYNAMIC_FETCH 替换 OCI_DEFAULT 并使用 OCIDefineDynamic 注册我的回调,并且我确实使用 OCI_FIRST_PIECE 调用,以动态提供缓冲区,但这里再次提供的缓冲区必须足够大,而 OCI 没有提供获取的 varchar2 列的实际大小,正如人们所期望的那样,能够根据需要动态调整缓冲区的大小,或者只接受太短的缓冲区并使用 OCI_NEXT_PIECE 再次给我回电,这样我就可以累积值一块一块地。

现在我系统地得到ORA-01406: fetched column value was truncated

谁能提供一个动态分配的提取缓冲区的例子吗?TIA,--DD