CodeIgniter 和 PostgreSQL - 从返回 refcursor 的函数检索数据

发布于 2024-08-07 07:13:23 字数 206 浏览 10 评论 0原文

我有一个 PostgreSQL 函数,它选择数据并通过引用游标返回它,类似于以下声明:

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

如何通过 CodeIgniter 模型从此函数检索数据?我不能直接从函数中选择,因为它不直接返回数据。

I have a PostgreSQL function that selects data and returns it via a refcursor, similar to the following declaration:

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

How do I retrieve data from this function via a CodeIgniter model? I can't just SELECT directly from the function as it does not return the data directly.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

眼眸 2024-08-14 07:13:23

如果有人感兴趣,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 驱动程序的功能(尽管它可能可以重构),但它可以工作。

In case anyone is interested, a post on php.net gave the following solution:

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

Which can be wired up in the model as follows:

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

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

Not an ideal solution as it does not use the CI Postgres driver's functions (although it probably could be refactored to), but it works.

羅雙樹 2024-08-14 07:13:23

上面的答案没有利用 CI 活动记录类。要在 CI 中执行此操作,只需运行自定义查询。

例如:

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

The answer above does not take advantage of the CI active record class. To do this in CI just run a custom query.

For example:

$sql = "CREATE OR REPLACE FUNCTION... "
$this->db->query($sql);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文