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



last updated
2006/10/31

counter hits
since 1999/11/06


SQL文の実行

alertOracle関数(Ora_XXXX関数)は推奨されない関数となっています。PDO関数が使えない・使わない場合は、OCI8関数(現在のOracle関数)を使いましょう。

Oracle関数の場合、基本的に以下の構文となります。SELECTの場合、FETCHしながらデータをTABLE形式やプルダウンのOPTIONタグなどに加工・表示することになります。

cautionパラメータを伴うSQL文を実行する場合、必ずパラメータをバインドするようにしましょう。


<?php
    /* Oracleに接続 */
    $conn = Ora_Logon("scott@orcl", "tiger");

    /* カーソルオープン */
    $cursor = Ora_Open($conn);

    /* SQLの作成 */
    $sql = "...";

    /* SQLのparse */
    $ret = Ora_Parse($cursor, $sql);

    /* 実行 */
    $ncols = Ora_Exec($cursor);

    /* SELECT文ならFETCH */
//    While (Ora_Fetch($cursor) == 1) {
//        $tmp = Ora_GetColumn($cursor, 0);
//                    :
//    }

    /* SELECT以外なら COMMIT or ROLLBACK */
//    Ora_Commit($conn);
//    Ora_Rollback($conn);

    /* カーソルクローズ */
    Ora_Close($cursor);

    /* 切断 */
    Ora_Logoff($conn);
?>

Oracle8関数の場合、「Ora_XXXX」と異なり、カーソル関連の操作がありません。また、OCIResult のカラム名は、大文字で指定します。


<?php
    /* Oracleに接続 */
    $conn = OCILogon("scott", "tiger", "orcl");

    /* SQLの作成 */
    $sql = "...";

    /* SQLのparse */
    $sql = OCIParse($conn, $sql);

    /* 実行 */
    $ncols = OCIExecute($sql, OCI_DEFAULT);

    /* SELECT文ならFETCH */
    While (OCIFetch($sql)) {
        $tmp = OCIResult($sql, "COLUMN_NAME");
                    :
    }

    /* SELECT以外なら COMMIT or ROLLBACK */
//    OCICommit($conn);
//    OCIRollback($conn);

    /* リソースの解放 */
    OCIFreeStatement($sql);

    /* 切断 */
    OCILogoff($conn);
?>

以上の基本形だけで、「何件目から何件目だけを表示する」というサンプルを作ってみると、こんな感じになります(OCI8関数の場合)。


<?php
    /*
    || 1ページあたりの表示件数を定義
    || 外部のPHPファイルにまとめておいて、includeするのがマル
    */
    $COUNT_PER_PAGE = 10;


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

    /* 全件数を取得するSQLの作成と実行 */
    $sql = "SELECT COUNT(*) CNT FROM ...";
    $sql = OCIParse($conn, $sql);
    OCIExecute($sql, OCI_DEFAULT);
    $row_count = OCIResult($sql, "CNT");
    OCIFreeStatement($sql);


    /* 具体的なデータを取得するSQLの作成と実行 */
    $sql = "SELECT ... FROM ...";
    $sql = OCIParse($conn, $sql);
    OCIExecute($sql, OCI_DEFAULT);

    /*
    || $pageという変数に現在のページ数(0,1,2...)が入っている
    || として、表示開始・終了がデータの何件目になるかを計算
    */
    $page_start = $page * $COUNT_PER_PAGE;
    $page_end = ($row_count < ($page + 1) * CNT_PER_PAGE) ? $row_count : ($page + 1) * CNT_PER_PAGE;


    while (OCIFetch($sql)) {
        /* 現在Fetchした件数 */
        $current_row = OCIRowCount($sql);

        /* 現在Fetchした行が、表示する件数の範囲にあれば表示する */
        if ( $page_start <= $current_row && $current_row < $page_end) {

            /* 表示などの処理をここに書く */
            echo OCIResult($sql, "...");
                        :
        }
    }

    /* リソースの解放 */
    OCIFreeStatement($sql);

    /* 切断 */
    OCILogoff($conn);
?>



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