【问题标题】:error when collecting tokens from a full text database从全文数据库收集令牌时出错
【发布时间】: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 行

  1. 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


【解决方案1】:

似乎从第一次看答案太容易了:

也有必要使用架构名称引用ctx_doc.token_tab;

我不得不使用the_tokens ctxsys.ctx_doc.token_tab;,而不是the_tokens ctx_doc.token_tab

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多