PL / SQL不提取任何具有空值的行

时间:2012-12-22 13:56:22

标签: php plsql

我正在尝试从dummie数据库中获取行的PL / SQL连接。但是,它似乎没有选择任何具有空值的行。在命令行上测试相同的SQL命令确实有效。

我创建了以下测试表:

CREATE TABLE test
( 
  id number(4) primary key,
  test_field VARCHAR(255)
);

并插入以下虚拟数据:

INSERT INTO test
(id, test_field) VALUES (1, 'test1');

INSERT INTO test
(id, test_field) VALUES (2, NULL);

当我在命令行上执行以下SQL命令时     SELECT * FROM test;

我收到2行,包含我预期的数据(第2行没有test_field值)

但是,执行相同的命令

$conn = oci_connect(..., ..., ...);
if (!$conn) { // error handling }
$stid = oci_parse($conn, 'SELECT * FROM test');
oci_execute($stid);
while (($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))) { 
    var_dump($row);
}

它内部没有达到任何目的。

这是抽象的sql数据,当我用更大的数据文件测试它时,它似乎获取任何没有空列的行(如果请求,我可以发布数据集)。此外,类似“SELECT 1,null FROM dual”的确会返回空值。

我一直在敲打这个问题几个小时。我希望你们中的任何一个人都能给我一些关于出错的指示。

提前感谢!

1 个答案:

答案 0 :(得分:0)

您使用的是什么版本的php和oracle?我试图重现你的问题,但得到了完美的回应:

array(2) {
  ["ID"]=>
  string(1) "1"
  ["TEST_FIELD"]=>
  string(5) "test1"
}
array(2) {
  ["ID"]=>
  string(1) "2"
  ["TEST_FIELD"]=>
  NULL
}

如果你根本没有获得任何输出,你应该像Michael建议的那样打开error_reporting。

不要添加分号,因为这实际上会给你错误,因为这是一个SQL语句,而不是PL / SQL语句。

这就是PHP文档中的内容:

  

SQL语句不应以分号(“;”)结尾。 PL / SQL   语句应以分号结尾(“;”)。