溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么創(chuàng)建Oracle Text用戶

發(fā)布時間:2021-11-04 09:50:35 來源:億速云 閱讀:176 作者:iii 欄目:關系型數據庫

這篇文章主要講解了“怎么創(chuàng)建Oracle Text用戶”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么創(chuàng)建Oracle Text用戶”吧!

1.創(chuàng)建Oracle Text用戶

在創(chuàng)建Oracle Text索引和使用Oracle Text PL / SQL包之前,需要創(chuàng)建一個具有CTXAPP角色的用戶。 該角色可以執(zhí)行以下操作:

  • 創(chuàng)建和刪除Oracle Text索引首選項

  • 使用Oracle Text PL / SQL軟件包

--1.創(chuàng)建用戶ctxdev
CREATE USER ctxdev IDENTIFIED BY oracle default tablespace tbs_ctxdev;
--2.授予角色給用戶ctxdev
GRANT RESOURCE, CONNECT, CTXAPP TO ctxdev;
--3.授予CTX PL/SQL程序包的執(zhí)行權限
GRANT EXECUTE ON CTXSYS.CTX_CLS TO ctxdev;
GRANT EXECUTE ON CTXSYS.CTX_DDL TO ctxdev;
GRANT EXECUTE ON CTXSYS.CTX_DOC TO ctxdev;
GRANT EXECUTE ON CTXSYS.CTX_OUTPUT TO ctxdev;
GRANT EXECUTE ON CTXSYS.CTX_QUERY TO ctxdev;
GRANT EXECUTE ON CTXSYS.CTX_REPORT TO ctxdev;
GRANT EXECUTE ON CTXSYS.CTX_THES TO ctxdev;
GRANT EXECUTE ON CTXSYS.CTX_ULEXER TO ctxdev;
--這些權限已經被授予給CTXAPP角色。 但是由于角色權限在PL/SQL過程中并不總是起作用,因此最安全的方式是將這些權限顯式授予已經具有CTXAPP角色的用戶。
SQL> select role,privilege,table_name from role_tab_privs where role='CTXAPP' order by 2,3;
ROLE		     PRIVILEGE				      TABLE_NAME
-------------------- ---------------------------------------- --------------------
CTXAPP		     DELETE				      DR$DICTIONARY
CTXAPP		     EXECUTE				      CTX_ANL
CTXAPP		     EXECUTE				      CTX_DDL
CTXAPP		     EXECUTE				      CTX_ENTITY
CTXAPP		     EXECUTE				      CTX_OUTPUT
CTXAPP		     EXECUTE				      CTX_THES
CTXAPP		     EXECUTE				      CTX_TREE
CTXAPP		     EXECUTE				      CTX_ULEXER
CTXAPP		     EXECUTE				      DRIENTL
CTXAPP		     EXECUTE				      DRITHSL
CTXAPP		     INSERT				      DR$DICTIONARY
CTXAPP		     INSERT				      DR$THS
CTXAPP		     INSERT				      DR$THS_BT
CTXAPP		     INSERT				      DR$THS_FPHRASE
CTXAPP		     INSERT				      DR$THS_PHRASE
CTXAPP		     SELECT				      DR$DICTIONARY
CTXAPP		     UPDATE				      DR$DICTIONARY
CTXAPP		     UPDATE				      DR$THS_PHRASE

如果數據庫沒有安裝Oracle Text,則授予CTXAPP會報如下錯誤:

ORA-01919: role 'CTXAPP' does not exist

此時我們需要給數據庫安裝Oracle Text,測試環(huán)境是12c多租戶,可以在PDB(注意要先在CDB中安裝,不然下次重啟數據庫時,檢測到CDB中沒有Oracle Text,PDB會進入受限模式)中直接安裝Oracle Text組件:

--方法1:執(zhí)行catctx.sql腳本
SQL> alter session set container=orcl;
SQL> select COMP_ID,COMP_NAME,VERSION,STATUS,SCHEMA from user_registry where comp_id='CONTEXT';
no rows selected
--1.安裝Oracle Text
SQL> @?/ctx/admin/catctx.sql oracle SYSAUX TEMP NOLOCK  --執(zhí)行腳本+參數[ctxsys用戶密碼、用戶默認永久sysaux、臨時表空間temp、創(chuàng)建后用戶是否鎖定nolock |lock]
SQL> col comp_name for a20;
SQL> set linesize 200;
SQL> col schema for a20;
SQL> col status for a20;
SQL> col version for a20;
SQL> col comp_id for a20;
SQL> select COMP_ID,COMP_NAME,VERSION,STATUS,SCHEMA from user_registry where comp_id='CONTEXT';
COMP_ID 	     COMP_NAME		  VERSION	       STATUS		    SCHEMA
-------------------- -------------------- -------------------- -------------------- --------------------
CONTEXT 	     Oracle Text	  12.2.0.1.0	       VALID		    CTXSYS
--2.安裝默認語言首選項
SQL> @?/ctx/admin/defaults/dr0defin.sql "AMERICAN";
--方法2:DBCA silent install的方式
--注意:在12.1.0.2或12.2.0.1中不支持通過DBCA將數據庫組件(如Oracle Text)添加到單個PDB。 此功能將在18.1中添加。
--語法:
--非多組戶環(huán)境:
dbca -silent -configureDatabase -sourceDB <db unique name for RAC or SID for Single Instance db> -sysDBAUserName <user name with SYSDBA privileges> -sysDBAPassword <password for sysDBAUserName user name>] -addDBOption ORACLE_TEXT
--多租戶環(huán)境:
dbca -silent -configurePluggableDatabase -sourceDB <container_name> -pdbName <pluggable_name> -sysDBAUserName SYS -sysDBAPassword <password> -addDBOption ORACLE_TEXT
--1.安裝Oracle Text
dbca -silent -configureDatabase  -SourceDB lycdb -sysDBAUsername sys -sysDBAPassword oracle -addDBOption ORACLE_TEXT
--2.安裝默認語言首選項
如果語言不是英語,則安裝適當的特定于語言的默認首選項。$ORACLE_HOME/ctx/admin/defaults目錄中包含為Oracle Text支持的每種語言創(chuàng)建特定于語言的默認首選項的腳本,例如英語(US),丹麥語(DK),荷蘭語(NL),芬蘭語(SF),法語 (F),德語(D),意大利語(IT),葡萄牙語(PT),西班牙語(E)和瑞典語(S)。 它們以drdefXX.sql的形式命名,其中XX是國際憑證代碼。
如果不知道國際憑證代碼,也可以調用dr0defdp.sql(刪除默認首選項)和dr0defin.sql(根據語言名稱,安裝首選項)
一般英文用:AMERICAN,中文用SIMPLIFIED CHINESE
例如,要手動安裝德語默認首選項,請以CTXSYS身份登錄sqlplus并運行以下語句:
SQL> connect / sysdba
SQL> spool defprefs_install.log
SQL> alter user ctxsys identified by ctxsys account unlock;
SQL> connect ctxsys/ctxsys
SQL> @?/ctx/admin/defaults/dr0defdp.sql
SQL> @?/ctx/admin/defaults/dr0defin.sql "SIMPLIFIED CHINESE";
SQL> connect SYS/password as SYSDBA
SQL> alter user ctxsys account lock password expire;
SQL> spool off

2.查詢應用程序簡單體驗

在基本的文本查詢應用程序中,用戶輸入查詢詞或短語,并期望該應用程序返回與查詢最匹配的文檔列表。 這樣的應用程序涉及創(chuàng)建一個CONTEXT索引并使用CONTAINS對其進行查詢。

通常,查詢應用程序需要用戶界面。 CONTEXT查詢應用程序中提供了一個如何使用CONTEXT索引類型構建這樣的查詢應用程序的示例。

下面示例提供了基本的SQL語句,用于加載文本表,為文檔建立索引以及查詢索引。

--1.創(chuàng)建存放文本數據的表,并插入數據
SQL> conn ctxdev/oracle@orcl
CREATE TABLE docs (id NUMBER PRIMARY KEY, text VARCHAR2(200));
INSERT INTO docs VALUES(1, '<HTML>California is a state in the US.</HTML>');
INSERT INTO docs VALUES(2, '<HTML>Paris is a city in France.</HTML>');
INSERT INTO docs VALUES(3, '<HTML>France is in Europe.</HTML>');
commit;
--2.創(chuàng)建Context索引
--通過在文本列上創(chuàng)建一個CONTEXT索引來為HTML文件建立索引,如下所示。 因為要為HTML編制索引,所以本示例使用NULL_FILTER首選項類型(不進行過濾)和HTML_SECTION_GROUP類型。 如果為PDF,Microsoft Word或其他格式的文檔建立索引,請使用CTXSYS.AUTO_FILTER(默認設置)作為FILTER首選項。
CREATE INDEX idx_docs ON docs(text)
     INDEXTYPE IS CTXSYS.CONTEXT PARAMETERS
     ('FILTER CTXSYS.NULL_FILTER SECTION GROUP CTXSYS.HTML_SECTION_GROUP');
     
--3.查詢表數據
--查找包含單詞France的所有文檔:
COLUMN text FORMAT a40;
SQL> SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'France', 1) > 0;
  SCORE(1)	   ID TEXT
---------- ---------- --------------------------------------------------------------------------------
	 4	    2 <HTML>Paris is a city in France.</HTML>
	 4	    3 <HTML>France is in Europe.</HTML>
--4.展示文檔
--在實際的應用程序中,可以顯示所選文檔并突出顯示查詢詞。 Oracle Text使您可以使用CTX_DOC軟件包標記文檔。可以在SQL * Plus中使用匿名PL/SQL塊演示HTML文檔標記。 但是,在實際應用程序中,可以在瀏覽器中顯示文檔。此PL/SQL示例使用內存中的CTX_DOC.MARKUP版本突出顯示文檔3中的單詞France。它分配了一個臨時CLOB(字符大對象數據類型)來存儲標記文本,并將其讀回到標準輸出。 然后在退出之前將CLOB釋放:
SET SERVEROUTPUT ON;
DECLARE
  mklob CLOB;
  amt   NUMBER := 40;
  line  VARCHAR2(80);
BEGIN
  CTX_DOC.MARKUP('idx_docs', '3', 'France', mklob);
  DBMS_LOB.READ(mklob, amt, 1, line);
  DBMS_OUTPUT.PUT_LINE(line);
  DBMS_LOB.FREETEMPORARY(mklob);
END;
/
<HTML><<<France>>> is in Europe.</HTML>
PL/SQL procedure successfully completed.
--5.數據處理后同步索引
--創(chuàng)建CONTEXT索引時,需要顯式同步索引,以使用對文本表的任何插入,更新或刪除來更新索引??梢允褂肅TX_DDL.SYNC_INDEX過程來執(zhí)行此操作。
--插入新數據
INSERT INTO docs VALUES(4, '<HTML>Los Angeles is a city in California.</HTML>');
INSERT INTO docs VALUES(5, '<HTML>Mexico City is big.</HTML>');
commit;
--提交后沒能查詢到新數據
SQL> SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'city', 1) > 0;
  SCORE(1)	   ID TEXT
---------- ---------- --------------------------------------------------------------------------------
	 4	    2 <HTML>Paris is a city in France.</HTML>
--將索引與2 Mb的內存同步,然后重新運行查詢:     
SQL> EXEC CTX_DDL.SYNC_INDEX('idx_docs', '2M');
PL/SQL procedure successfully completed.
--新數據可以正常查詢
SQL> SELECT SCORE(1), id, text FROM docs WHERE CONTAINS(text, 'city', 1) > 0;
  SCORE(1)	   ID TEXT
---------- ---------- --------------------------------------------------------------------------------
	 4	    2 <HTML>Paris is a city in France.</HTML>
	 4	    4 <HTML>Los Angeles is a city in California.</HTML>
	 4	    5 <HTML>Mexico City is big.</HTML>

3.目錄應用程序簡單體驗

示例提供了基本的SQL語句,可為出售電子設備(例如相機和CD播放器)的拍賣網站創(chuàng)建目錄索引。 每天都會添加新的庫存,并且必須將項目描述,投標日期和價格一起存儲。

對于混合查詢,該應用程序需要良好的響應時間。 關鍵是確定用戶經常搜索哪些列以創(chuàng)建合適的CTXCAT索引。 對此類索引的查詢使用CATSEARCH運算符。

--1.創(chuàng)建一張庫存表并插入數據
conn ctxdev/oracle@orcl
CREATE TABLE auction(
item_id NUMBER,
title VARCHAR2(100),
category_id NUMBER,
price NUMBER,
bid_close 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');
commit;
--2.確定可能要檢索的條件。 在此示例中,確定所有查詢都在title列中搜索商品說明,并且大多數查詢都按price排序。 當使用CATSEARCH運算符時,請為文本列指定術語,并為結構化子句指定條件。
--3.創(chuàng)建子索引以按價格排序
--創(chuàng)建一個名為auction_set的索引集,并為price列添加一個子索引
EXEC CTX_DDL.CREATE_INDEX_SET('auction_iset');
EXEC CTX_DDL.ADD_INDEX('auction_iset','price');
--4.創(chuàng)建CTXCAT索引
CREATE INDEX auction_titlex ON AUCTION(title) INDEXTYPE IS CTXSYS.CTXCAT PARAMETERS ('index set auction_iset');
--5.查詢
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
SQL> SELECT title, price FROM auction WHERE CATSEARCH(title, 'CAMERA', 'price <= 300')>0;
TITLE					      PRICE
---------------------------------------- ----------
PENTAX CAMERA					200
CANON CAMERA					250
OLYMPUS CAMERA					300
--6.更新表數據,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');
commit;
SQL> 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

4.分類應用程序簡單體驗

分類應用程序的功能是根據文檔內容執(zhí)行某些操作。 這些操作可以包括為文檔分配類別ID或將文檔發(fā)送給用戶。 結果是對文檔進行分類。

--1.創(chuàng)建規(guī)則表
conn ctxdev/oracle@orcl
CREATE TABLE queries (
      query_id      NUMBER,
      query_string  VARCHAR2(80)
    );
INSERT INTO queries VALUES (1, 'oracle');
INSERT INTO queries VALUES (2, 'larry or ellison');
INSERT INTO queries VALUES (3, 'oracle and text');
INSERT INTO queries VALUES (4, 'market share');
commit;
--2.創(chuàng)建CTXRULE索引
CREATE INDEX queryx ON queries(query_string) INDEXTYPE IS CTXSYS.CTXRULE;
--3.在SELECT語句的WHERE子句中使用MATCHES運算符可將文檔與查詢匹配,然后對文檔進行分類
COLUMN query_string FORMAT a35;
SELECT query_id,query_string FROM queries WHERE MATCHES(query_string, 'Oracle announced that its market share in databases increased over the last year.')>0;
  QUERY_ID QUERY_STRING
---------- -----------------------------------
	 4 market share
	 1 oracle

感謝各位的閱讀,以上就是“怎么創(chuàng)建Oracle Text用戶”的內容了,經過本文的學習后,相信大家對怎么創(chuàng)建Oracle Text用戶這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI