0

次の宣言のように、データを選択してrefcursorを介して返すPostgreSQL関数があります。

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

CodeIgniterモデルを介してこの関数からデータを取得するにはどうすればよいですか?データを直接返さないため、関数から直接SELECTすることはできません。

4

2 に答える 2

5

興味のある方のために、 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ドライバーの機能を使用しないため、理想的なソリューションではありませんが(おそらくリファクタリングできる可能性があります)、機能します。

于 2009-10-08T16:00:32.577 に答える
0

上記の回答は、CI アクティブ レコード クラスを利用していません。CI でこれを行うには、カスタム クエリを実行するだけです。

例えば:

$sql = "CREATE OR REPLACE FUNCTION... "
$this->db->query($sql);
于 2011-12-14T23:23:47.757 に答える