|
Oracle8からSELECT文の中にカーソルを使えるようになりましたが、最近になって使い始めました。そこでPHPで使おうとするとどう書くのか、いろいろ調べてサンプルを見つけたのですが、手元にあるPHPマニュアルをよく見てみるとサンプルが載ってました。。。まさに「灯台下暗し」。。。折角なので、載せておきます。
基本的には通常のSELECT文と同じ処理ですが、2つのSELECT文を実行すると考えれば、イメージがわきやすいかと思います。ポイントとして、以下の点が上げられます。
- SELECT文の内部cursorに必ず別名を付ける(今回は「EMPLOYEE」としました)
- cursorを取り出したあとに、それを引数としてOCIExecute()を実行する
- OCIFetchInto()で取り出したカラム名は必ず大文字を指定する
<?php
$conn = OCILogon("scott", "tiger", "orcl");
$sql = "SELECT D.dname, CURSOR(SELECT E.empno, E.ename FROM emp E "
. "WHERE E.deptno = D.deptno) AS EMPLOYEE "
. "FROM dept D ";
$stmt = OCIParse($conn, $sql);
ociexecute($stmt);
echo "<dl>";
while (OCIFetchInto($stmt, &$data, OCI_ASSOC)) {
echo "<dt>". $data["DNAME"]."</dt>";
ociexecute($data["EMPLOYEE"]);
while (OCIFetchInto($data["EMPLOYEE"], &$subdata, OCI_ASSOC)) {
echo "<dd>" . $subdata["EMPNO"] . " - " . $subdata["ENAME"]."</dd>";
}
}
echo "</dl>";
OCIFreeCursor($stmt);
OCILogoff($conn);
?>
|