0

我们目前正在切换我们的应用程序以在 Linux 机器上运行并通过 DB2 Connect 连接到 IBMi。

到目前为止,我们已经安装了 db2 connect,成功地在 linux 上设置了“虚拟”数据库,创建了连接并将 SQL 从 Linux 运行到 IBMi(通过命令行和 Zend 应用程序)——但只有当我们在 SQL 中为文件定义库。

我们目前在我们的 linux 机器上运行 Zend Server 7、Ibm db2 V1.9.7 和 DB2 Connect 10.5,以及 php 版本 5.5。

已经注意到,新版本的 Db2 connect 10.5 和 ibm_db2 1.9.7 支持 LUW 上的系统命名。http://yips.idevcloud.com/wiki/index.php/PHP/DB2Connection见第一行。

然而,我们没有成功让 DB2_I5_NAMING_ON 在我们的 Linux 机器上工作,这样我们就可以避免指定库。

这是我们试图从 Zend 运行的示例。

$driverOptions = array('i5_libl' => 'library1 library2','i5_naming' => DB2_I5_NAMING_ON, 'i5_lib'=>'library1');

$config = array(
   'adapter' => 'Db2',
   'params' => array(
   'username' => $user,
   'password' => $password,
   'dbname'   => $database,
   'driver_options'=> $driverOptions
   )
);

$config = new Zend_Config($config);
$db = Zend_Db::factory($config);

$select = $db->select()->from("FILENAMEHERE");
$result = $select->query();

但是,我们继续收到此消息

Message: [IBM][CLI Driver][AS] SQL0204N "USERSNAMEHERE.FILENAMEHERE" is an undefined name. SQLSTATE=42704 SQLCODE=-204

它已在库中添加了用户名,并且不会使用指定的库列表(中间的“.”表示它仍在使用 sql 命名而不是系统)。

我们还包括ibm_db2.i5_sys_naming=1在我们的 ibm_db2.ini 文件中。

有谁知道为了使系统命名工作或知道需要进行任何其他配置更改或知道我们可能遇到此类问题的任何原因?

任何帮助将不胜感激。

4

2 回答 2

0

我熟悉 IBM i 上的 DB2,但不熟悉 PHP。

我会尝试删除

'i5_lib'=>'library1'

那可能是设置您的 CURRENT SCHEMA,这将激活 SQL 命名模式,而不是系统命名。

连接后,如果您尝试为要在其中创建的对象定义默认库,请考虑使用 CHGCURLIB CL 命令。这会将该库放在库列表的用户部分的前面。

CALL QCMDEXC ('CHGCURLIB somelib');
于 2015-10-20T16:32:47.423 回答
0

这个问题是因为我们连接的 IBMi 机器使用的是 os 6.1。IBMi V7R1 已得到增强,可提供命名模式控制。我们目前正在努力访问一个运行 V7.1 的盒子,它应该可以解决我们的问题。

于 2015-10-23T08:41:09.670 回答