oci_fetch_* returns 行数少于 Oracle SQL 开发人员

oci_fetch_* returns less rows than Oracle SQL Developer

我在 Oracle SQL Developer 和 PHP / OCI / Instaclient 中都是 运行 一个非常简单的查询,我得到的行数不同!

select * from T_MYTABLE where FOO = 'BAR';

代码:

$connectionString = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521)))(CONNECT_DATA=(SID=MYSID)))";
$conn = oci_connect($username, $passwort, $connectionString);
$ps1 = oci_parse($conn, "ALTER SESSION SET NLS_LANGUAGE = GERMAN_GERMANY.UTF8;");
oci_execute($ps1);

$sql = "select * from T_MYTABLE where FOO = 'BAR'";
$ps2 = oci_parse($conn, $sql);
$r = oci_execute($ps2);

while ($row = oci_fetch_array($ps2, OCI_ASSOC+OCI_RETURN_NULLS)) {
    print_r($row);
    echo "\n";
}

这是我的 SQL 开发人员结果的 ID 列,旁边是 PHP 接收这些行的顺序:

ID
663257   1
773255   9
778802   8
778799   7
773250   6
806716   5
808275   4
806721   3
808280   2
826381   NOT INCLUDED
826383   NOT INCLUDED

查询中曾经有一个 "ORDER BY ID",但我将其遗漏了,因为我觉得这种行为可能暗示了 Oracle 的内部工作原理。就好像,当从 OCI 端接近数据库时,它不知道最后两行(最新的)。

我真的不明白这是怎么回事。我已经习惯了 MySQL,同样的查询会给你同样的结果...

是的,我在这两种情况下 运行 完全相同的查询。

是的,我正在访问同一个数据库。

对不起,我是白痴!

Goran Stefanović 给了我正确的提示,我仍在连接到我们的 "old"(即在虚拟化之前)Oracle 服务器。

如果您遇到本主题中提到的问题:请关闭任何不需要的 ORACLE 实例