使用带分页的 PHP oci8 从多个 Oracle 数据库中获取数据作为单个结果集
Fetching data from multiple Oracle databases as a single resultset using PHP oci8 with pagination
- 我有 5 个不同的 Oracle 数据库,即 FDB1617、FDB1516、FDB1415、
FDB1413 和 FDB1312。
- 他们的数据库结构都是一样的。
- 我想在一次查询中从所有数据库中获取数据
使用 PHP 和带分页的 OCI8。
例如:
SELECT ID,ContactName, Phone FROM FDB1617
应该从所有 5 个数据库中获取数据;
分页可以使用以下代码
public function execFetchPage($sql, $action, $firstrow = 1, $numrows = 1, $bindvars = array()) {
$query = 'SELECT * FROM (SELECT a.*, ROWNUM AS rnum FROM (' . $sql . ') a WHERE ROWNUM <= :sq_last) WHERE :sq_first <= RNUM';
array_push($bindvars, array(':sq_first', $firstrow, -1));
array_push($bindvars, array(':sq_last', $firstrow + $numrows - 1, -1));
$res = $this->execFetchAll($query, $action, $bindvars);
return($res);
}
请帮助并提前致谢
您可以使用 database links 和 UNION
发出多个查询,同时返回单个结果集。
CREATE DATABASE LINK link_name CONNECT TO username IDENTIFIED BY password USING connection_string;
...
然后:
SELECT ID, ContactName, Phone FROM table_name
UNION
SELECT ID, ContactName, Phone FROM table_name@link_name
UNION
...
- 我有 5 个不同的 Oracle 数据库,即 FDB1617、FDB1516、FDB1415、 FDB1413 和 FDB1312。
- 他们的数据库结构都是一样的。
- 我想在一次查询中从所有数据库中获取数据 使用 PHP 和带分页的 OCI8。
例如:
SELECT ID,ContactName, Phone FROM FDB1617
应该从所有 5 个数据库中获取数据;
分页可以使用以下代码
public function execFetchPage($sql, $action, $firstrow = 1, $numrows = 1, $bindvars = array()) {
$query = 'SELECT * FROM (SELECT a.*, ROWNUM AS rnum FROM (' . $sql . ') a WHERE ROWNUM <= :sq_last) WHERE :sq_first <= RNUM';
array_push($bindvars, array(':sq_first', $firstrow, -1));
array_push($bindvars, array(':sq_last', $firstrow + $numrows - 1, -1));
$res = $this->execFetchAll($query, $action, $bindvars);
return($res);
}
请帮助并提前致谢
您可以使用 database links 和 UNION
发出多个查询,同时返回单个结果集。
CREATE DATABASE LINK link_name CONNECT TO username IDENTIFIED BY password USING connection_string;
...
然后:
SELECT ID, ContactName, Phone FROM table_name
UNION
SELECT ID, ContactName, Phone FROM table_name@link_name
UNION
...