--首先检查数据库中是否有CTXSYS用户和CTXAPP脚色。
--如果没有这个用户和角色,意味着你的数据库创建时未安装intermedia功能。
--你必须修改数据库以安装这项功能。
--用sys用户为了用户gzinfo分配权限
grant
CTXAPP
to
gzinfo;
grant execute on ctx_ddl to gzinfo;
grant execute on ctx_ddl to gzinfo;
--回到gzinfo用户
--创建测试表,CLOBTEXT字段为需要索引的字段
create
table
INXTEXT (ID
number
(
13
), CLOBTEXT CLOB);
--创建分词,这里用了chinese_vgram_lexer,分词名为GZINFO_LEXER
call ctx_ddl.create_preference (
'
GZINFO_LEXER
'
,
'
chinese_vgram_lexer
'
);
--创建索引,索引名为INX_TEST (PARAMETERS 中需要以LEXER开头,替换时用replace)
create
index
INX_TEST
ON
INXTEXT (CLOBTEXT) INDEXTYPE
IS
CTXSYS.CONTEXT PARAMETERS (
'
LEXER INFO_LEXER
'
);
--创建记录表
create
table
JOBTEST (ID DATE, CONTENT
VARCHAR2
(
200
));
--创建同步存储过程,ctx_ddl.sync_index('INX_TEST')为同步全文索引,同步表字段中的信息
create
or
replace
procedure
PROC_SYNC_INDEX
is
begin
ctx_ddl.sync_index( ' INX_TEST ' );
insert into JOBTEST values (SYSDATE, ' 同步任务于 ' || SYSDATE || ' 执行 ' );
end ;
is
begin
ctx_ddl.sync_index( ' INX_TEST ' );
insert into JOBTEST values (SYSDATE, ' 同步任务于 ' || SYSDATE || ' 执行 ' );
end ;
--创建同步优化存储过程,ctx_ddl.optimize_index('INX_TEST','FULL')为优化全文索引
Code
create or replace procedure PROC_SYNC_OPTIMIZE
is
begin
ctx_ddl.sync_index('INX_TEST');
ctx_ddl.optimize_index('INX_TEST','FULL');
insert into JOBTEST values(SYSDATE, '同步优化任务于'||SYSDATE||'执行');
end;
create or replace procedure PROC_SYNC_OPTIMIZE
is
begin
ctx_ddl.sync_index('INX_TEST');
ctx_ddl.optimize_index('INX_TEST','FULL');
insert into JOBTEST values(SYSDATE, '同步优化任务于'||SYSDATE||'执行');
end;
--创建定时任务以便同步全文索引
DECLARE
X NUMBER ;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => X
,what => ' PROC_SYNC_INDEX; '
,next_date => SYSDATE
,interval => ' SYSDATE+2/1440 '
);
END ;
X NUMBER ;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => X
,what => ' PROC_SYNC_INDEX; '
,next_date => SYSDATE
,interval => ' SYSDATE+2/1440 '
);
END ;
--创建定时任务以便同步优化全文索引
Code
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => X
,what => 'PROC_SYNC_OPTIMIZE;'
,next_date => SYSDATE
,interval => 'TRUNC(SYSDATE + 1) + 1/(24)'
);
END;
DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
(
job => X
,what => 'PROC_SYNC_OPTIMIZE;'
,next_date => SYSDATE
,interval => 'TRUNC(SYSDATE + 1) + 1/(24)'
);
END;
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/skey_chen/archive/2009/11/12/4801211.aspx