日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ORACLE TEXT DATASTORE PREFERENCE(二)

發(fā)布時(shí)間:2024/8/26 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ORACLE TEXT DATASTORE PREFERENCE(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇文章繼續(xù)討論全文索引的DATASTORE屬性,介紹MULTI_COLUMN_DATASTORE。


如果被索引的文章是保存在數(shù)據(jù)庫中,但是內(nèi)容分布在多個(gè)列中,那么可以通過建立一個(gè)MULTI_COLUMN_DATASTORE來索引完整的文章:

SQL> CREATE TABLE T (ID NUMBER, DOC1 VARCHAR2(4000), DOC2 VARCHAR2(4000), DOC3 VARCHAR2(4000));

表已創(chuàng)建。

SQL> INSERT INTO T VALUES (1,?
2 'The first paragraph of article in doc1.',?
3 'The second partments is the doc2.',?
4 'The last content is in the doc3.');

已創(chuàng)建?1 行。

SQL> INSERT INTO T VALUES (2,?
2 'This example create a multi-column datastore preference',?
3 'called test_multicol on three text columns',?
4 'to be concatenated and indexed.');

已創(chuàng)建?1 行。

SQL> COMMIT;

提交完成。

下面創(chuàng)建索引,由于需要建立一個(gè)多列存儲(chǔ)的全文索引,需要將多個(gè)列的列名作為參數(shù)傳給Oracle。這個(gè)過程通過建立一個(gè)PREFERENCE,并設(shè)置屬性來完成。

注意,下面的代碼需要由CTXSYS用戶執(zhí)行,這點(diǎn)是文檔上沒有明確說明的。

SQL> CONN CTXSYS/CTXSYS@YANGTK
已連接。
SQL> BEGIN
2 CTX_DDL.CREATE_PREFERENCE('TEST_MULTICOL', 'MULTI_COLUMN_DATASTORE');
3 CTX_DDL.SET_ATTRIBUTE('TEST_MULTICOL', 'COLUMNS', 'DOC1, DOC2, DOC3');
4 END;
5 /

PL/SQL 過程已成功完成。

下面在建立索引的時(shí)候指定DATASTORE參數(shù)為新建的TEST_MULTICOL參數(shù):

SQL> CONN YANGTK/YANGTK@YANGTK
已連接。
SQL> CREATE INDEX IND_T_DOCS ON T (DOC1) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.TEST_MULTICOL');

索引已創(chuàng)建。

SQL> SELECT * FROM T WHERE CONTAINS(DOC1, 'CONTENT') > 0;

ID
----------
DOC1
---------------------------------------------------------------------------
DOC2
---------------------------------------------------------------------------
DOC3
---------------------------------------------------------------------------
1
The first paragraph of article in doc1.
The second partments is the doc2.
The last content is in the doc3.

通過查詢的結(jié)果可以發(fā)現(xiàn),這個(gè)多列的全文索引已經(jīng)生效。

SQL> SELECT * FROM T WHERE CONTAINS(DOC2, 'CONTENT') > 0;
SELECT * FROM T WHERE CONTAINS(DOC2, 'CONTENT') > 0
*
ERROR 位于第 1 行:
ORA-20000: Oracle Text error:
DRG-10599: 列沒有編制索引


SQL> CREATE INDEX IND_T_DOCS2 ON T (DOC2) INDEXTYPE IS CTXSYS.CONTEXT
2 PARAMETERS ('DATASTORE CTXSYS.TEST_MULTICOL');

索引已創(chuàng)建。

SQL> SELECT * FROM T WHERE CONTAINS(DOC2, 'CONTENT') > 0;

ID
----------
DOC1
----------------------------------------------------------------------------
DOC2
----------------------------------------------------------------------------
DOC3
----------------------------------------------------------------------------
1
The first paragraph of article in doc1.
The second partments is the doc2.
The last content is in the doc3.

通過上面的例子可以看出,對(duì)于多列的全文索引可以建立在多個(gè)列的任意一列上,但是,在查詢時(shí)指定的列必須與索引時(shí)指定的列保持一致。

最后注意一點(diǎn),只有索引指定的列發(fā)生修改,Oracle才會(huì)認(rèn)為被索引數(shù)據(jù)發(fā)生了變化,僅僅修改其他列而沒有修改索引列,即使同步索引也不會(huì)將修改同步到索引中。

SQL> DROP INDEX IND_T_DOCS2;

索引已丟棄。

SQL> SELECT * FROM CTX_USER_PENDING;

未選定行

SQL> UPDATE T SET COL3 = NULL WHERE ID = 1;
UPDATE T SET COL3 = NULL WHERE ID = 1
*
ERROR 位于第 1 行:
ORA-00904: "COL3": 無效的標(biāo)識(shí)符


SQL> UPDATE T SET DOC3 = NULL WHERE ID = 1;

已更新?1 行。

SQL> SELECT * FROM CTX_USER_PENDING;

未選定行

SQL> UPDATE T SET DOC1 = NULL WHERE ID = 1;

已更新?1 行。

SQL> SELECT * FROM CTX_USER_PENDING;

PND_INDEX_NAME PND_PARTITION_NAME PND_ROWID PND_TIMEST
-------------------------- ------------------ ------------------ ----------
IND_T_DOCS AAAJXiAAMAAAAAGAAA 25-7月 -06

總結(jié)

以上是生活随笔為你收集整理的ORACLE TEXT DATASTORE PREFERENCE(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。