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

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

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

0
Justin Ethier 8 Окт 2009 в 17:46

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

5
Justin Ethier 8 Окт 2009 в 20:00

В приведенном выше ответе не используется активный класс записи CI. Для этого в CI просто запустите собственный запрос.

Например:

$sql = "CREATE OR REPLACE FUNCTION... "
$this->db->query($sql);
0
keithhackbarth 15 Дек 2011 в 03:23
Согласен, но я не пытался CREATE использовать эту функцию. Функция возвращает курсор, и мне нужно было вызвать эту функцию и прочитать данные, которые она возвращает. Если вы можете опубликовать пример выполнения этого с использованием класса активных записей CI, я был бы признателен.
 – 
Justin Ethier
15 Дек 2011 в 06:52