Sybase Adaptive Server IQ не может выбрать *, всегда ограничен 30?

У меня есть эта проблема с базой данных Sybase IQ (версия SELECT @@version показывает Adaptive Server IQ / 12.5.0 / 0306) с использованием расширения PHP SQL Anywhere.

Я не могу выбрать все строки, т.е. SELECT * from anytable всегда возвращает 30 строк.

Единственный обходной путь, который я нашел, использует SELECT TOP 1000 * from anytable (максимум 32767), но есть определенные ситуации, когда мне нужны все строки.

Буду признателен за любую оказанную помощь.

РЕДАКТИРОВАТЬ: пример сценария (очень похоже на документация)

$conn = sasql_connect("HOST=host:port;DBN=dbn;UID=uid;PWD=pwd");
if (!$conn) { echo "Connection failed."; die(); }

$result = sasql_query($conn, "SELECT * FROM dba.anytable" );
sasql_result_all($result); // display 30 rows in a formatted table
sasql_free_result($result);
sasql_disconnect($conn);

РЕДАКТИРОВАТЬ: спецификации обеих машин, где я испытываю та же самая проблема:

Разработка машины:

Производственный сервер:

11

Решение

Вероятно, глупый вопрос, но просто чтобы быть уверенным.

Вы проверили в Client -> Tools -> Sybase IQ -> Максимальное количество отображаемых строк.

(прошу прощения за то, что опубликовал это как ответ, но у меня недостаточно представителей, чтобы спросить вас в комментариях.)

5

Другие решения

Ну, возможно, где-то есть настраиваемое свойство, которое освободит вас от злых когтей 30. Я не знаю, где это свойство. Я надеюсь, что кто-то найдет это.

Однако, в случае, если никто этого не делает, это большой хак, который упорядочивает по первичному ключу данной таблицы, извлекает столько строк, сколько может с учетом ваших ограничений, и отслеживает последний извлеченный первичный ключ для получения следующего пакета. рядов. Было бы лучше адаптировать это для использования START AT или же LIMIT / OFFSET если доступно, но я предполагаю, что это не так. Если один из них доступен, вы можете использовать этот подход для любой таблицы. Если нет, этот подход можно адаптировать к любой таблице, которая имеет уникальный ненулевой ключ.

$conn = sasql_connect("HOST=host:port;DBN=dbn;UID=uid;PWD=pwd");
if (!$conn) {echo "Connection failed."; die(); }

$highest_id = -1;
$num_rows_retrieved = 0;

do {
if (!sasql_real_query($conn, "SELECT TOP 32767 * FROM dba.anytable where anytable_id > $highest_id order by anytable_id")) {
echo "Query failed.";
die();
}
$result = sasql_use_result($conn);
if (!$result) {
echo "No result set.";
die();
}
$num_rows_retrieved = 0;
$num_fields = sasql_num_fields($result);
while ($row = sasql_fetch_row($result)) {
$highest_id = $row[0];  // assumes anytable_id is the first field
$i = 0;
while ($i < $num_fields) {
echo "$row[$i]\t";
$i++;
}
$num_rows_retrieved++;
echo "\n";
}
sasql_free_result($result);
} while ($num_rows_retrieved == 32767);

sasql_disconnect($conn);
3

По вопросам рекламы [email protected]