【发布时间】:2017-03-08 09:01:45
【问题描述】:
我想测试 Oracle 的 CTX_DOC.TOKENS 过程,以便计算一个字符串在文档中出现的次数。 为此,我有:
create table documents (id number primary key, text bfile);
insert into documents values (1, bfilename('MY_DIR','12things_about_122.pdf'));
create index documents_idx on documents (text) indextype is ctxsys.context;
declare
the_tokens ctx_doc.token_tab;
begin
ctx_doc.set_key_type ('PRIMARY_KEY');
ctx_doc.tokens('documents_idx','1',the_tokens);
dbms_output.put_line('Number of tokens: '|| the_tokens.count);
end;
当我对此进行测试时,PLSQL 部分失败:
错误报告:
ORA-20000:Oracle 文本错误:
DRG-10001:无法访问结果表 the_tokens
ORA-06512:在“CTXSYS.DRUE”,第 160 行
ORA-06512:在“CTXSYS.CTX_DOC”,第 862 行 ORA-06512:在第 5 行
- 00000 - “%s”
*原因:存储过程“raise_application_error” 被调用,导致生成此错误。
*操作:按照错误消息或联系中的描述更正问题 有关详细信息,请联系应用程序管理员或 DBA。
请您帮助我了解为了正常工作还需要什么?
谢谢,
【问题讨论】:
-
如果您只上传文本(.txt)文件,该程序是否有效?它适用于 PDF 和文本。您能否检查您是否已授予对表的正确访问权限并从正确的模式运行。根据 oracle 的错误消息意味着 -
Specified table does not exist or server does not have write privileges -
该代码不适用于 PDF 或 TXT 文件。对于访问,我提供了所有权限: GRANT ALL on ctxsys.doc to my_user PLSQL 代码是从 my_user 模式执行的。据我所知,所有要求似乎都得到了满足。请问你是用什么用户来执行代码的?
-
看来问题出在
ctx_doc.tokens('documents_idx', '1', 'the_tokens');,因为如果我评论它,则不会发生错误。 -
你试过看ctx_doc包的代码吗?
-
是的,我做到了,但它被包装了。
标签: oracle full-text-search token