2011-03-28 361 views
1

我添加一個索引到我的表的命令:
CREATE INDEX patient_index ON radiology_record(patient_name) INDEXTYPE IS CTXSYS.CONTEXT;甲骨文標識符「CTX_DDL」必須聲明 - 加入DBMS_JOB

而且我嘗試添加DBMS_JOB這將使它保持日期。
我一直在運行該腳本的方法是從SQLPLUS調用「@ myscript.sql」

set serveroutput on 
declare 
    job number; 
begin 
    dbms_job.submit(job, 'ctx_ddl.sync_index(''patient_index'');', 
        interval=>'SYSDATE+1/1440'); 
    commit; 
    dbms_output.put_line('job '||job||'has been submitted.'); 
end; 
/

產生的誤差是PLS-00201: identifier 'CTX_DDL' must be declared

通過我的搜索,我發現有人用類似的問題他solution

我花了足夠的時間 調試這一點,我認爲這 值得分享我學到了什麼。它 事實證明,dbms_jobs只會繼承 您的架構用戶的默認權限, 不會從授予該用戶的角色繼承 的任何權限。這 意味着作業將不會運行 ctxsys權限,您應該 已授予您的架構用戶。那麼 這是什麼意思?這意味着你 必須運行工作作爲CTXSYS用戶

我很遺憾不能使用此授予我的特權,因爲是的,這是功課,我沒有權限授予對CTX_DDL執行對自己。

有沒有人有我如何解決這個問題的線索?否則,我會等到本週晚些時候再諮詢TA的。
感謝

+2

此功能 - 通過角色授予的特權不適用於pl/sql - 是一種標準(且煩人的)Oracle功能。您需要在明確授予您的ctx_ddl上執行執行。隨着時間的推移,你會發現這同樣適用於其他類型的對象,特別是表格和視圖。 – 2011-03-28 10:34:05

回答

3

我不認爲有一個變通方法,因爲documentation of DBMS_JOB明確規定這種限制:由用戶或用戶被明確授予EXECUTE擁有

可以執行的程序。但是,無法執行通過角色授予用戶執行權限的過程。

+1

有關詳細的SQL指令以提供'CTXSYS.CTX_DDL'包的'EXECUTE'特權,請參見http://docs.oracle.com/cd/B28359_01/text.111/b28303/quicktour.htm =>看起來像'將CTXSYS.CTX_DDL授予myuser;' – 2012-01-26 09:47:45