Oracle Db:查询 Ctx_Ddl 首选项
Oracle Db: Querying out Ctx_Ddl Preferences
在尝试操作上下文索引的存储参数时,我指定了一个名为 mystore
的新 CTX 首选项,如下所示:
DECLARE
prefs_ VARCHAR2(20) := 'mystore';
BEGIN
Ctx_Ddl.Drop_Preference (prefs_);
Ctx_Ddl.Create_preference (prefs_, 'BASIC_STORAGE');
Ctx_Ddl.Set_Attribute (prefs_, 'I_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'K_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'R_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M) lob (data) store as (cache)');
Ctx_Ddl.Set_Attribute (prefs_, 'N_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'I_INDEX_CLAUSE', 'tablespace TIX_TS storage (initial 1M) compress 2');
Ctx_Ddl.Set_Attribute (prefs_, 'P_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'S_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'D_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M) LOB(DOC) STORE AS SECUREFILE (tablespace TIX_TS cache)');
Ctx_Ddl.Set_Attribute (prefs_, 'O_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M) LOB(OFFSET_INFO) STORE AS SECUREFILE (tablespace TIX_TS cache)');
Ctx_Ddl.Set_Attribute (prefs_, 'FORWARD_INDEX', 'YES');
Ctx_Ddl.Set_Attribute (prefs_, 'SAVE_COPY', 'PLAINTEXT');
END;
上面的代码工作正常,这样当我使用下面的 DDL 创建我的上下文索引时,关联的 DR$
表连同我已经创建的所有其他设置一起在 TIX_TS
表空间中创建关联到 mystore
句柄名称。
CREATE INDEX my_tix ON my_tab (text_id$) INDEXTYPE IS ctxsys.context PARAMETERS ('storage mystore')
不过我的问题是如何对 mystore
的设置进行逆向工程?换句话说,假设我(或其他人)已经设置了名为 mystore
的属性的值,我如何查询这些属性以查看它们是否需要更新?
第二层问题是问我怎么知道有哪些设置要查询出来?我当然知道句柄 mystore
的设置是可以使用的,因为我只是设置了它们。但是我怎么知道其他人设置了哪些句柄呢?
正如@gsalem 所指出的,以下 SQL 让我们可以看到已定义的首选项:
select p.*, '' ">>>", v.*
from ctx_preferences p
INNER JOIN ctx_preference_values v
ON v.prv_owner = p.pre_owner
AND v.prv_preference = p.pre_name
显然就这些了。
在尝试操作上下文索引的存储参数时,我指定了一个名为 mystore
的新 CTX 首选项,如下所示:
DECLARE
prefs_ VARCHAR2(20) := 'mystore';
BEGIN
Ctx_Ddl.Drop_Preference (prefs_);
Ctx_Ddl.Create_preference (prefs_, 'BASIC_STORAGE');
Ctx_Ddl.Set_Attribute (prefs_, 'I_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'K_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'R_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M) lob (data) store as (cache)');
Ctx_Ddl.Set_Attribute (prefs_, 'N_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'I_INDEX_CLAUSE', 'tablespace TIX_TS storage (initial 1M) compress 2');
Ctx_Ddl.Set_Attribute (prefs_, 'P_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'S_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M)');
Ctx_Ddl.Set_Attribute (prefs_, 'D_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M) LOB(DOC) STORE AS SECUREFILE (tablespace TIX_TS cache)');
Ctx_Ddl.Set_Attribute (prefs_, 'O_TABLE_CLAUSE', 'tablespace TIX_TS storage (initial 1M) LOB(OFFSET_INFO) STORE AS SECUREFILE (tablespace TIX_TS cache)');
Ctx_Ddl.Set_Attribute (prefs_, 'FORWARD_INDEX', 'YES');
Ctx_Ddl.Set_Attribute (prefs_, 'SAVE_COPY', 'PLAINTEXT');
END;
上面的代码工作正常,这样当我使用下面的 DDL 创建我的上下文索引时,关联的 DR$
表连同我已经创建的所有其他设置一起在 TIX_TS
表空间中创建关联到 mystore
句柄名称。
CREATE INDEX my_tix ON my_tab (text_id$) INDEXTYPE IS ctxsys.context PARAMETERS ('storage mystore')
不过我的问题是如何对 mystore
的设置进行逆向工程?换句话说,假设我(或其他人)已经设置了名为 mystore
的属性的值,我如何查询这些属性以查看它们是否需要更新?
第二层问题是问我怎么知道有哪些设置要查询出来?我当然知道句柄 mystore
的设置是可以使用的,因为我只是设置了它们。但是我怎么知道其他人设置了哪些句柄呢?
正如@gsalem 所指出的,以下 SQL 让我们可以看到已定义的首选项:
select p.*, '' ">>>", v.*
from ctx_preferences p
INNER JOIN ctx_preference_values v
ON v.prv_owner = p.pre_owner
AND v.prv_preference = p.pre_name
显然就这些了。