выбирая запись из оракула - PullRequest
2 голосов
/ 07 мая 2011

Чтобы выбрать последнюю запись, я использовал это, когда моей базой данных была MySQL:

$result = mysql_query("SELECT Id 
                         FROM test 
                     ORDER BY LENGTH(Id), Id ASC");

$count = mysql_numrows($result);

if($count != 0) {    
  $lastid = mysql_result($result,$count-1,"Id");    
}

... и она отлично работает.
Но теперь моя таблица находится в базе данных Oracle - я написал:

$stid = oci_parse($conn, "SELECT Id 
                            FROM test 
                        ORDER BY LENGTH(Id), Id ASC");

oci_execute($stid);

$p = oci_parse($conn, "SELECT COUNT(ID) 
                         FROM test");

oci_execute($p);

$count = oci_fetch_array($p);

if($count[0] != 0) {    
  $lastid = oci_result($stid, $count[0]-1);
}

Это не работает - я не получаю последнюю запись.

Ответы [ 2 ]

3 голосов
/ 07 мая 2011

И для чего вы это используете? Если он предназначен для определения следующего идентификатора, не делает этого , а вместо этого использует sequence Если нет, то вы можете использовать select max(id) from testid, чтобы получить максимальное значение столбца.

редактировать

Сначала создайте последовательность для сохранения порядкового номера:

create sequence testid_seq;

Затем, когда вы вставляете запись, используйте

insert into testid(id, ...) values ("D111-" || testid_seq.nextval, ... );

И просто заполните точки информацией, которую вы хотите вставить.

0 голосов
/ 07 мая 2011

Если вы прочитаете документацию для oci_result , вы обнаружите, что используете второй параметр неправильно.

Второй параметр - это то, что вы используете для извлечения столбца - это может быть имя столбца или порядковый номер. Порядковое значение - это число, начинающееся с единицы (1) в зависимости от столбцов, указанных в предложении SELECT. Порядковые числа не являются рекомендуемой практикой, потому что, если запрос изменяется - если вы забыли обновить порядковый номер, ваш поиск значений облажался. По сути, последующий запрос COUNT возвращает значение, превышающее число столбцов в первом предложении SELECT запросов.

$stid = oci_parse($conn, "SELECT Id 
                            FROM test 
                        ORDER BY LENGTH(Id), Id ASC");

oci_execute($stid);

$lastid = oci_result($stid, 1);

oci_result не хватает третьего параметра, который предоставляет mysql_result.

Чтобы заставить вещи работать в Oracle, используйте:

$stid = oci_parse($conn, "SELECT x.id
                            FROM (SELECT Id 
                                    FROM test 
                                ORDER BY LENGTH(Id) DESC, Id DESC) x
                           WHERE ROWNUM = 1");

oci_execute($stid);

$lastid = oci_result($stid, 1);

Обновленный запрос вернет одну строку, последняя из которых основана на отмене ранее использованного ORDER BY.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...