У меня есть функция PostgreSQL, которая выбирает данные и возвращает их через рефкурсор, как в следующем объявлении:
CREATE OR REPLACE FUNCTION my_function()
RETURNS refcursor AS
...
Как мне получить данные из этой функции с помощью модели CodeIgniter? Я не могу просто ВЫБРАТЬ непосредственно из функции, поскольку она не возвращает данные напрямую.
2 ответа
Если кому-то интересно, сообщение на php.net дало следующее решение:
protected function dbquery($query){
pg_query("BEGIN;");
$tr=pg_query($query);
$r=pg_fetch_row($tr);
$name=$r[0];
$rs=pg_query("FETCH ALL IN \"" . $name . "\";");
pg_query("END;");
return $rs;
}
Что может быть подключено к модели следующим образом:
$query = $this->dbquery("SELECT * FROM my_function()");
while ($row = pg_fetch_assoc($query))
{
array_push($result, array('my_column' => $row['my_column'] ));
}
Не идеальное решение, поскольку в нем не используются функции драйвера CI Postgres (хотя его, вероятно, можно было бы реорганизовать), но оно работает.
В приведенном выше ответе не используется активный класс записи CI. Для этого в CI просто запустите собственный запрос.
Например:
$sql = "CREATE OR REPLACE FUNCTION... "
$this->db->query($sql);
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.
CREATE
использовать эту функцию. Функция возвращает курсор, и мне нужно было вызвать эту функцию и прочитать данные, которые она возвращает. Если вы можете опубликовать пример выполнения этого с использованием класса активных записей CI, я был бы признателен.