CodeIgniter и PostgreSQL - получение данных из функции, возвращающей refcursor - PullRequest
0 голосов
/ 08 октября 2009

У меня есть функция PostgreSQL, которая выбирает данные и возвращает их через рефкурсор, аналогично следующему объявлению:

CREATE OR REPLACE FUNCTION my_function()
  RETURNS refcursor AS
  ...

Как получить данные из этой функции через модель CodeIgniter? Я не могу просто ВЫБРАТЬ напрямую из функции, так как она не возвращает данные напрямую.

Ответы [ 2 ]

5 голосов
/ 08 октября 2009

В случае, если кому-то интересно, сообщение на 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 (хотя, вероятно, его можно изменить), но оно работает.

0 голосов
/ 15 декабря 2011

Ответ выше не использует класс активной записи CI. Чтобы сделать это в CI, просто запустите пользовательский запрос.

Например:

$sql = "CREATE OR REPLACE FUNCTION... "
$this->db->query($sql);
...