您好,登錄后才能下訂單哦!
這篇文章主要講解了“怎么創建Oracle Text用戶”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么創建Oracle Text用戶”吧!
1.創建Oracle Text用戶
在創建Oracle Text索引和使用Oracle Text PL / SQL包之前,需要創建一個具有CTXAPP角色的用戶。 該角色可以執行以下操作:
創建和刪除Oracle Text索引首選項
使用Oracle Text PL / SQL軟件包
--1.創建用戶ctxdev CREATE USER ctxdev IDENTIFIED BY oracle default tablespace tbs_ctxdev; --2.授予角色給用戶ctxdev GRANT RESOURCE, CONNECT, CTXAPP TO ctxdev; --3.授予CTX PL/SQL程序包的執行權限 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,測試環境是12c多租戶,可以在PDB(注意要先在CDB中安裝,不然下次重啟數據庫時,檢測到CDB中沒有Oracle Text,PDB會進入受限模式)中直接安裝Oracle Text組件:
--方法1:執行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 --執行腳本+參數[ctxsys用戶密碼、用戶默認永久sysaux、臨時表空間temp、創建后用戶是否鎖定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中添加。 --語法: --非多組戶環境: 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 --多租戶環境: 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支持的每種語言創建特定于語言的默認首選項的腳本,例如英語(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.查詢應用程序簡單體驗
在基本的文本查詢應用程序中,用戶輸入查詢詞或短語,并期望該應用程序返回與查詢最匹配的文檔列表。 這樣的應用程序涉及創建一個CONTEXT索引并使用CONTAINS對其進行查詢。
通常,查詢應用程序需要用戶界面。 CONTEXT查詢應用程序中提供了一個如何使用CONTEXT索引類型構建這樣的查詢應用程序的示例。
下面示例提供了基本的SQL語句,用于加載文本表,為文檔建立索引以及查詢索引。
--1.創建存放文本數據的表,并插入數據 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.創建Context索引 --通過在文本列上創建一個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.數據處理后同步索引 --創建CONTEXT索引時,需要顯式同步索引,以使用對文本表的任何插入,更新或刪除來更新索引。可以使用CTX_DDL.SYNC_INDEX過程來執行此操作。 --插入新數據 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播放器)的拍賣網站創建目錄索引。 每天都會添加新的庫存,并且必須將項目描述,投標日期和價格一起存儲。
對于混合查詢,該應用程序需要良好的響應時間。 關鍵是確定用戶經常搜索哪些列以創建合適的CTXCAT索引。 對此類索引的查詢使用CATSEARCH運算符。
--1.創建一張庫存表并插入數據 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.創建子索引以按價格排序 --創建一個名為auction_set的索引集,并為price列添加一個子索引 EXEC CTX_DDL.CREATE_INDEX_SET('auction_iset'); EXEC CTX_DDL.ADD_INDEX('auction_iset','price'); --4.創建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.分類應用程序簡單體驗
分類應用程序的功能是根據文檔內容執行某些操作。 這些操作可以包括為文檔分配類別ID或將文檔發送給用戶。 結果是對文檔進行分類。
--1.創建規則表 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.創建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
感謝各位的閱讀,以上就是“怎么創建Oracle Text用戶”的內容了,經過本文的學習后,相信大家對怎么創建Oracle Text用戶這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。