我想尝试定义架构以设置库列表,我可以在其中搜索查询sql的表。
在momenti我可以通过这个字符串连接将我的DB2连接到IBMi:
$user = 'USER';
$password = 'PWD';
$hostname = '192.168.1.100';
$db = 'S6528B5A';
$conn_string = "DRIVER={iSeries Access ODBC Driver};
SYSTEM=$hostname;
PROTOCOL=TCPIP;
UID=$user;
PWD=$password;
DATABASE=$db;
DefaultSchema={LIB1,LIB2};";
连接成功建立我获得资源ID#3,但是当我尝试执行sql查询时:
$sql = 'SELECT * FROM FILE1';
$rows = odbc_exec($conn, $sql);
我收到错误的SQL状态S0002,其中找不到文件(就好像在错误的库中搜索文件一样,在库中搜索与打开连接的用户名相同)
如何在第一个连接处设置我的环境而不是执行查询?
答案 0 :(得分:3)
使用此连接字符串启用系统命名并且不设置默认库:
$conn_string = "DRIVER={iSeries Access ODBC Driver};
SYSTEM=$hostname;
PROTOCOL=TCPIP;
UID=$user;
PWD=$password;
Naming=1;
DefaultSchema=,LIB1,LIB2;";
Client Access ODBC: Default Libraries Setting
ODBC connection string keywords
相关部分的摘录如下:
使用SQL命名约定,操作系统不会执行库列表搜索以查找非限定对象。如果定义了默认集合,则使用默认集合来解析不合格的SQL语句。
...
使用SYS命名约定,非限定SQL语句将转到默认集合。如果没有默认集合,则使用当前库。如果未指定当前库,则使用库列表。
...
默认收藏
ODBC设置的作业属性,用于确定处理包含非限定SQL名称的SQL语句时使用的库。设置默认集合时,除了过程,函数和类型之外的所有非限定对象都必须驻留在默认集合中,而不管命名约定如何。
...
如何让ODBC搜索库列表?
如上所述,编辑ODBC数据源并将系统命名设置为SYS。默认库必须为空,或者在早于R510的版本上,默认库设置必须以逗号开头,以便不定义默认集合(例如,“,MYLIB1,MYLIB2”)。