Pergunta

Eu tenho uma função PostGresql que seleciona dados e os retorna por meio de um refursor, semelhante à seguinte declaração:

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

Como recuperar dados dessa função por meio de um modelo CodeIgniter? Não posso apenas selecionar diretamente da função, pois ela não retorna os dados diretamente.

Foi útil?

Solução

Caso alguém esteja interessado, um post sobre php.net deu a seguinte solução:

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;
}

Que pode ser conectado no modelo da seguinte forma:

$query = $this->dbquery("SELECT * FROM my_function()");

while ($row = pg_fetch_assoc($query))
{
   array_push($result, array('my_column' => $row['my_column'] ));
}

Não é uma solução ideal, pois não usa as funções do driver do CI Postgres (embora provavelmente possa ser refaturado), mas funciona.

Outras dicas

A resposta acima não aproveita a classe de registro ativo do CI. Para fazer isso no CI, apenas execute uma consulta personalizada.

Por exemplo:

$sql = "CREATE OR REPLACE FUNCTION... "
$this->db->query($sql);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top