次の宣言のように、データを選択してrefcursorを介して返すPostgreSQL関数があります。
CREATE OR REPLACE FUNCTION my_function()
RETURNS refcursor AS
...
CodeIgniterモデルを介してこの関数からデータを取得するにはどうすればよいですか?データを直接返さないため、関数から直接SELECTすることはできません。
次の宣言のように、データを選択してrefcursorを介して返すPostgreSQL関数があります。
CREATE OR REPLACE FUNCTION my_function()
RETURNS refcursor AS
...
CodeIgniterモデルを介してこの関数からデータを取得するにはどうすればよいですか?データを直接返さないため、関数から直接SELECTすることはできません。
興味のある方のために、 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ドライバーの機能を使用しないため、理想的なソリューションではありませんが(おそらくリファクタリングできる可能性があります)、機能します。
上記の回答は、CI アクティブ レコード クラスを利用していません。CI でこれを行うには、カスタム クエリを実行するだけです。
例えば:
$sql = "CREATE OR REPLACE FUNCTION... "
$this->db->query($sql);