问题标签 [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 回答
1085 浏览

c++ - 使用 Ocilib 时填充字符串缓冲区

我正在使用Ocilib在 Oracle 数据库上执行批量插入,但在填充字符串缓冲区时遇到了一些问题。

文档说:

对于字符串/RAW 数组,输入数组必须是连续的数据块,而不是指针数组。因此,要为 varchar2(30) 列绑定 10 个元素的数组,绑定变量必须是类似的数组 [10] [31]

样本继续填充缓冲区,如下所示:

我试图在循环通过 MyClass 的 std::vector 时填充字符串缓冲区。MyClass 有一个 std::string 成员。

我正在尝试使用 std::string::copy 方法将字符串内容复制到缓冲区。但我不确切知道如何索引缓冲区来做到这一点。

第一种方法给了我数据库中的错误数据。第二个让我碰到一个空指针。

我做错了什么?

PS

第二种方法,与下面 Alessandro Vergani 提出的方法一样,会插入空字符串。第一种方法给出了这个(有点奇怪)的结果:

数据库内容

gvim 窗口显示它应该是什么样子,顶点屏幕显示最终在数据库中的内容。

0 投票
2 回答
2300 浏览

php - 使用 oci_new_collection 访问包内定义的可变数组类型

您好我正在尝试将可变数组从 PHP 传递到 Oracle。我正在使用 OCI8,并且之前曾将可变数组用作存储过程中的参数,并且在编译时创建了这些可变数组的类型。所以在PHP端制作集合实例时,我们可以直接提及集合名称。

前任:

其中 MY_ARRAY 将是我在 Oracle 实例中声明的可变数组类型。

因此,当我在包之外创建它们时,类型会被编译并在执行期间准备就绪。

如果我从包中这样做,我会得到错误

PHP 警告:oci_new_collection() [function.oci-new-collection]: OCI-22303: type ""."my_pack.my_array_type" not found

我的包头看起来像这样

现在,当我从 PHP 调用创建集合实例时,我就是这样做的

现在我得到了未找到的警告类型。

我的问题是,我将如何调用包中的 varray 类型???我正在以 package.type_name 的形式执行此操作,但我收到了提示未找到类型的警告。

0 投票
1 回答
584 浏览

ruby - 如何卸载 ruby​​-oci8

我使用的 ruby​​ gem 需要ruby​​-oci8 版本 2+。 但是,我的机器似乎已经有了 ruby​​-oci8版本 1.0.0。但这我无法卸载。

我已经成功运行gem uninstall ruby ​​-oci8 。然后,使用 irb 类型

如何从 ruby​​-oci v1.0.0 清理我的 Windows 机器?

谢谢。

0 投票
1 回答
344 浏览

oracle - 使用 OCI_ATTR_PASSWORD 将密码提供给 OCIAttrSet 时是否区分大小写?

在 (c++) OCI 程序的片段中,我使用OCIAttrSet标志OCI_ATTR_PASSWORD来传递(或设置)密码来初始化会话,如下所示:

随后的

如果密码以小写字母给出,则可以正常工作。如果至少有一个字符password大写,则OCISessionBegin返回错误ORA-01017: invalid username/password; logon denied

这种行为与我在 Oracle 中看到的每个密码处理都不同,因为到目前为止我认为它们是不区分大小写的。然而,我没有在某处发现这种行为。那么,这是预期的行为(我无法找到文档)还是发生了其他事情?

0 投票
1 回答
1226 浏览

php - 使用 PHP 和 oci_bind_by_name 将值列表传递给 Oracle

我有一个我希望绑定或传递给这个 Oracle SQL 查询的数字列表。

是否允许使用命令 oci_bind_by_name 将 :idList 与包含 Id 列表的字符串绑定?可以看作是一个序列化 Id 的字符串吗?

例子:

“只是”似乎不可行,因为序列化列表不是 SQL 语法的一部分。有什么想法可以达到我的目标吗?

0 投票
1 回答
1615 浏览

oracle - Oracle OCI 连接池与 Oracle UCP

当 OCI 驱动程序用于 JDBC 连接时,Oracle 提供了 4 种不同的 JDBC 连接池机制:

  1. 甲骨文数据源
  2. Oracle OCI 连接池
  3. Oracle UCP(通用连接池 - 推荐使用 OracleDataSource)
  4. Oracle 数据库常驻连接池

与 OCI 驱动程序提供的 Oracle OCI 连接池相比,使用 Oracle UCP(通用连接池)的优缺点是什么?

0 投票
1 回答
111 浏览

c - 是否可以重用 Oracle 本机编译的共享库?

由于 Oracle 可以对 PL/SQL 代码进行本机 C 编译(代码使用像 gcc 这样的 C 编译器编译成服务器文件系统上的共享对象文件)我想知道这一点。我可以开发一段 C 代码用于 extproc 链接到本机编译的 PL/SQL 函数吗?这将是一件好事,因为所有困难的 OCI 内容都可以在 PL/SQL 中完成,所有逻辑或数学内容都可以在 C 中完成。因此我需要知道(至少,我认为)函数名称和参数,以便我可以制作一个头文件 - 对吧?有没有办法对.so进行逆向工程?有没有人尝试过这样的黑客?它更多的是“我想学习和实验”,而不是解决实际问题。

EDIT1:我发现了什么:我可以修改 $ORACLE_HOME/plsql/spnc_commands 文件并在链接器命令后面附加一个 cp %(src) /tmp%(src) 。所以我可以调查生成的 C 代码,但这不是一个很大的帮助:-(

0 投票
1 回答
1030 浏览

connection-pooling - OCI连接池中的会话多路复用有什么好处

我正在研究 OCI 连接池,其主要优点是会话多路复用。据我了解,会话多路复用是在同一物理连接上进行多个会话。

在进行了一些测试后,我意识到 OCI 驱动程序仅在该连接上的第一个会话为 IDLE 时才会在同一物理连接上多路复用多个会话。虽然在初始会话已经处于活动状态时不启动新会话似乎是合乎逻辑的,但我无法理解会话多路复用在 Web 应用程序中的实际使用。

应用程序请求连接但不使用它(即借用的连接保持空闲)不是很罕见吗?

如果有人可以分享他们使用 OCI 连接池的会话多路复用功能的经验,那就太好了。

0 投票
1 回答
1187 浏览

oracle - Oracle OCI 客户端缓存不工作

我正在使用 Oracle Database 11g 版本 11.2.0.2.0 并尝试启用 oci 客户端缓存。它不工作。我为启用它所做的配置更改是 -

  1. 通过将服务器端参数“client_result_cache_size”设置为 10485760 (10 MB) 来启用客户端结果集缓存
  2. 设置上述参数后重启oracle实例
  3. 通过执行语句 ALTER TABLE emp RESULT_CACHE (MODE FORCE) 添加了表注释。我验证了注释是通过稍后查询用户表来应用的。
  4. 在客户端(即 JDBC 驱动程序)上启用语句缓存。
  5. 使用准备好的语句来执行查询,以便启动语句缓存。从驱动程序日志中,我验证了在第一个查询之后执行后续查询使用相同的语句句柄。

在执行了 3 次 selectprepared statement 查询后,我检查了 CLIENT_RESULT_CACHE_STATS$ 视图。但是这个视图没有产生任何行。

作为故障排除的一部分,我什至尝试将 /*+ RESULT_CACHE */ 提示添加到查询中,但视图没有给出任何结果。

从分析器(flextracer)中,我可以看到仍然对服务器进行 OCI 调用以获取选择查询的结果集。同样在启用 sql trace 时,我可以从 tkprof 看到每次执行查询都会增加在服务器上获取的行数,这表明 OCI 中的客户端结果集缓存不起作用。

有没有我错过的步骤?

提前致谢。

0 投票
1 回答
4402 浏览

visual-c++ - 从 vc++ 链接到 oci 库时出错

我使用oracle 9i(个人edtn)中的OCI库从我的c程序连接到数据库。(我使用visual c++ 2005)我包含了来自oci的所有lib文件并将它们也包含在附加依赖项中,但是当我编译以下代码我得到链接器错误。

我得到的错误是,