我正在运行一个非常简单的查询,当我在SQL开发人员中运行它时,我返回了3行,但是当我采用相同的查询并尝试通过OCI_FETCH检索结果时,只返回1行。
以下是在SQL开发人员中运行时返回3个不同行的原始查询:
select a.cache_nm, b.nm_tx,
CASE
WHEN CAST(max(a.creation_tmstmp) as DATE) - CAST(max(a.request_from_tmstmp) as DATE) < 1/96
THEN 'Current'
ELSE 'BEHIND'
END as Site_Status
from perf_stats a inner join site b on (a.site_seq_id = b.site_seq_id)
group by a.cache_nm, b.nm_tx
这是PHP实现:
// Prepare the statement
$stid = oci_parse($conn, 'select a.cache_nm, b.nm_tx,
CASE
WHEN CAST(max(a.creation_tmstmp) as DATE) - CAST(max(a.request_from_tmstmp) as DATE) < 1/96
THEN \'Current\'
ELSE \'BEHIND\'
END as Site_Status
from perf_stats a inner join site b on (a.site_seq_id = b.site_seq_id)
group by a.cache_nm, b.nm_tx');
if (!$stid) {
$e = oci_error($conn);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Perform the logic of the query
$r = oci_execute($stid);
if (!$r) {
$e = oci_error($stid);
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// Fetch the results of the query
$nrows = oci_fetch_all($stid, $res);
echo "$nrows rows fetched<br>\n";
var_dump($res);
结果页面显示:
1 rows fetched
array(3) {
["CACHE_NM"] => array(1) {
[0]=> string(13) "SITE-01"
}
["NM_TX"] => array(1) {
[0]=> string(14) "SITE GAT"
}
["SITE_STATUS"] => array(1) {
[0] => string(6) "BEHIND"
}
}
我做了很多测试,分解了这个查询,并且在没有使用group by语句的情况下返回了多行。我也尝试了所有不同的OCI_FETCH函数。
我的问题是,我是否需要特别使用OCI8函数执行任何操作才能在SQL语句中使用group by。这简直令人沮丧,因为字面上我在SQL中唯一改变的是单引号的转义子句,以及它是INDEED工作的事实,只有1行...