2.4 カタログ・アプリケーションのクイック・ツアー

ここに示された例では、カメラやCDプレーヤなどの電子機器を販売するオークション・サイトのカタログ索引を作成するための基本SQL文を提供します。

毎日新しい在庫が追加され、品目の説明、入札日および価格をまとめて格納する必要があります。

アプリケーションは、複合問合せに対して適切な時間で応答する必要があります。適切なCTXCAT索引を作成するには、ユーザーが頻繁に検索する列を決定することが重要です。このタイプの索引の問合せは、CATSEARCH演算子を使用します。

ノート:

Oracle Textの索引タイプCTXCATは、Oracle Database 23aiでは非推奨です。索引タイプ自体とその演算子CTXCATは、将来のリリースで削除される可能性があります。

CONTEXT問合せの代替文法としてCTXCATおよびCTXCAT文法の使用はどちらも非推奨です。かわりに、Oracleでは、CONTEXT索引タイプを使用することをお薦めします。索引タイプは、トランザクション以外のすべての同じ機能を提供できます。CONTEXTでのトランザクションに近い動作は、SYNC(ON COMMIT)または短い期間(できればSYNC(EVERY [time-period]))を使用して実現できます。

CTXCATは、通常、索引のサイズが数メガバイトのときに導入されました。最近の大規模な索引は、CTXCATで管理が困難な場合があります。CTXCATへの索引セットの追加は、CONTEXT索引タイプでFILTER BY列とORDER BY列、またはSDATA列(あるいはその両方)を使用することで、より効率的に実行できます。したがって、CTXCATが適切な選択になることはほとんどありません。Oracleでは、より効率的なCONTEXT索引タイプを選択することをお薦めします。

2.4.1 表の作成

表を作成およびロードするには、次のステップを実行します。

  1. 適切なユーザーとして接続

    CTXAPPロールを持つmyuserとして接続します。

    CONNECT myuser;
    
  2. 表の作成

    在庫を格納するAuction表を設定します。

    CREATE TABLE auction(
    item_id NUMBER,
    title VARCHAR2(100),
    category_id NUMBER,
    price NUMBER,
    bid_close DATE);
    
  3. 表への移入

    id、title、priceおよびbid_dateの各項目を表に移入します。

    INSERT INTO AUCTION VALUES(1, 'NIKON CAMERA', 1, 400, '24-OCT-2002');
    INSERT INTO AUCTION VALUES(2, 'OLYMPUS CAMERA', 1, 300, '25-OCT-2002');
    INSERT INTO AUCTION VALUES(3, 'PENTAX CAMERA', 1, 200, '26-OCT-2002');
    INSERT INTO AUCTION VALUES(4, 'CANON CAMERA', 1, 250, '27-OCT-2002'); 

2.4.2 SQL*Loaderを使用した表へのロード

SQL*Loaderを使用して、バッチで表をロードできます。

次のステップを実行して、SQL*Loaderで表へのロードをバッチで実行します。

  1. 問合せの判断

    検索される可能性のある基準を判断します。この例では、すべての問合せが品目の説明のタイトル列を検索し、ほとんどの問合せが価格順になっているかどうかを判断します。その後、CATSEARCH演算子を使用するときに、テキスト列の語句および構造化句の基準を指定します。

  2. 価格順に並べ替えるサブ索引の作成

    Oracle Textでこれらの問合せを効率的に満たし、価格順に並べ替えるために、価格列にサブ索引を設定する必要があります。

    したがって、auction_setという名前の索引セットを作成し、price列にサブ索引を追加します。

    EXEC CTX_DDL.CREATE_INDEX_SET('auction_iset');
    EXEC CTX_DDL.ADD_INDEX('auction_iset','price'); /* subindex A*/
  3. CTXCAT索引を作成します。

    AUCTION表の結合されたカタログ索引を、CREATE INDEX文を使用して作成します。

    CREATE INDEX auction_titlex ON AUCTION(title) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('index set auction_iset');
    

    次の図に、CTXCAT索引およびサブ索引と列の関係を示します。

    図2-1 Auction表のスキーマとCTXCAT索引

    図2-1の説明が続きます
    「図2-1 Auction表のスキーマとCTXCAT索引」の説明
  4. CATSEARCHの使用による表の問い合せ

    AUCTION表にCTXCAT索引を作成したら、CATSEARCH演算子を使用してこの索引を問い合せることができます。

    出力を読取り可能にするために、まず出力書式を設定します。

    COLUMN title FORMAT a40;
    

    次に、問合せを実行します。

    SELECT title, price FROM auction WHERE CATSEARCH(title, 'CAMERA', 'order by price')> 0;
    
    TITLE                PRICE
    --------------- ----------
    PENTAX CAMERA          200
    CANON CAMERA           250
    OLYMPUS CAMERA         300
    NIKON CAMERA           400
    
    SELECT title, price FROM auction WHERE CATSEARCH(title, 'CAMERA', 
         'price <= 300')>0;
    
    TITLE                PRICE
    --------------- ----------
    PENTAX CAMERA          200
    CANON CAMERA           250
    OLYMPUS CAMERA         300
  5. 表の更新

    新しい行を追加することで、カタログ表を更新します。カタログ表を更新すると、変更を反映するために、CTXCAT索引が自動的に同期化されます。

    たとえば、表に次の新しい行を追加して、問合せを再実行します。

    INSERT INTO AUCTION VALUES(5, 'FUJI CAMERA', 1, 350, '28-OCT-2002');
    INSERT INTO AUCTION VALUES(6, 'SONY CAMERA', 1, 310, '28-OCT-2002');
    
    SELECT title, price FROM auction WHERE CATSEARCH(title, 'CAMERA', 'order by price')> 0;
    
    TITLE                                    PRICE
    ----------------------------------- ----------
    PENTAX CAMERA                              200
    CANON CAMERA                               250
    OLYMPUS CAMERA                             300
    SONY CAMERA                                310
    FUJI CAMERA                                350
    NIKON CAMERA                               400
    
    6 rows selected.
    

    追加された行が、問合せにただちに表示されます。

    関連項目:

    SQL*Loaderを使用したデータ・ファイルからテキスト表へのロード方法の例は、PSP Webアプリケーションの作成を参照してください