Do You PHP?    
Search Engine Optimization  php5 powerd  Valid XHTML 1.0!  Valid CSS!  このサイトのはてなブックマーク数 



last updated
2002/01/20

counter hits
since 1999/11/06


SELECT文中のcursor

Oracle8からSELECT文の中にカーソルを使えるようになりましたが、最近になって使い始めました。そこでPHPで使おうとするとどう書くのか、いろいろ調べてサンプルを見つけたのですが、手元にあるPHPマニュアルをよく見てみるとサンプルが載ってました。。。まさに「灯台下暗し」。。。折角なので、載せておきます。

基本的には通常のSELECT文と同じ処理ですが、2つのSELECT文を実行すると考えれば、イメージがわきやすいかと思います。ポイントとして、以下の点が上げられます。

  • SELECT文の内部cursorに必ず別名を付ける(今回は「EMPLOYEE」としました)
  • cursorを取り出したあとに、それを引数としてOCIExecute()を実行する
  • OCIFetchInto()で取り出したカラム名は必ず大文字を指定する

<?php

    //ociinternaldebug(1);

    //Oracleへの接続
    $conn = OCILogon("scott", "tiger", "orcl");

    //SQLの作成
    $sql = "SELECT D.dname, CURSOR(SELECT E.empno, E.ename FROM emp E "
         . "WHERE E.deptno = D.deptno) AS EMPLOYEE "
         . "FROM dept D ";

    //SQL分のパース
    $stmt = OCIParse($conn, $sql);

    //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);

?>



About This Site |  Privacy Policy |  Contact
Copyright © 1999 - 2002 by Hideyuki SHIMOOKA all rights reserved.