我们目前正在将应用程序切换到在Linux机器上运行,并通过DB2 Connect连接到IBMi。
到目前为止,我们已经安装了db2 connect,已成功在linux上设置'虚拟'数据库,创建连接并从Linux运行SQL到IBMi(通过命令行和我们的Zend应用程序) - 但只有在我们为SQLs中的文件定义库时。
我们目前在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.ini文件中包含了ibm_db2.i5_sys_naming=1
。
是否有人知道为了使系统命名工作或知道或为什么我们可能遇到此类问题而需要进行的任何其他配置更改?
非常感谢任何帮助。
答案 0 :(得分:0)
我熟悉IBM i上的DB2,但不熟悉PHP。
我会尝试删除
'i5_lib'=>'library1'
这可能是设置CURRENT SCHEMA,它会激活SQL命名模式,而不是系统命名。
连接后,如果要为要创建的对象定义默认库,请考虑使用CHGCURLIB CL命令。这会将该库放在库列表的用户部分前面。
CALL QCMDEXC ('CHGCURLIB somelib');
答案 1 :(得分:0)
这个问题是由于我们连接的IBMi机器正在使用os 6.1。 IBMi V7R1已得到增强,可提供命名模式控制。我们目前正在努力访问一个运行V7.1的盒子,它应该可以解决我们的问题。