我有一個perl應用程序,它使用DBD :: Oracle對Oracle數據庫執行SELECT。Perl和DBD :: Oracle - 可提取多少行? RowsInCache?
然後我想檢查是否有任何行被返回,並基於此分支。對於SELECT(根據perldoc和我的測試),Oracle的rows()方法返回-1,所以我爲MySQL做的事情將不起作用。
perldoc提到RowsInCache(「返回高速緩存中未選取行的數目」),但試圖從我的數據庫或語句句柄調用或檢查該行不起作用。例如:
if ($sth->RowsInCache > 0)
if ($sth::RowsInCache > 0)
if ($dbh->RowsInCache > 0)
if ($dbh::RowsInCache > 0)
我得到「無法找到對象方法」或「使用未初始化的值」。我的錯誤語法?
我所知道的一對夫婦的方式關閉完成我想要的東西:
首先做一個SELECT COUNT,看看行數,然後做真正的選擇。但這對於數據庫來說顯然是額外的工作。
如果你打電話
$行= $ sth-> fetchrow_hashref;
然後,如果沒有行並且您可以測試該行,$ row將是未定義的。不過,如果你的目的是這樣的......
$sth->execute($some_bind);
while ($row = $sth->fetchrow_hashref) {
...你必須要麼包括一些愚蠢的邏輯來處理的事實,你已經獲取的第一行,以測試是否有行,或做這樣的事情:
$sth->execute($some_bind);
$got_some_rows = 0;
while ($row = $sth->fetchrow_hashref) {
$got_some_rows = 1;
# other stuff
}
$sth->finish;
if ($got_some_rows == 0) {
...這不是世界末日,但....如果只是好像應該有一些簡單的方法,說:「哎數據庫,你有任何行爲了我」?
我失去了一些東西明顯?
謝謝!
你嘗試過'$ sth - > {'RowsInCache'}'嗎?這是DBD屬性的慣例,但我沒有專門使用Oracle。 – AKHolland