ORA-30553

创建自定义函数索引报如下错误

sN5HCekHDvwAAAAASUVORK5CYII=

报找个错误的原因是:在自定义函数中缺少DETERMINISTIC

联机文档如下说明:

Tells the optimizer that the function returns the same value whenever it is invoked with the same parameter values

 (if this is not true, then specifying DETERMINISTIC causes unpredictable results). If the function was invoked previously with

 the same parameter values, the optimizer can use the previous result instead of invoking the function again.

Do not specify DETERMINISTIC for a function whose result depends on the state of session variables or schema objects,

because results might vary across invocations. Instead, consider making the function result-cached (see "Making Result-Cached Functions

  Handle Session-Specific Settings" and "Making Result-Cached Functions Handle Session-Specific Application Contexts").

Only DETERMINISTIC functions can be invoked from a function-based index or a materialized view that has query-rewrite enabled.

For more information and possible limitations of the DETERMINISTIC option, see "CREATE FUNCTION Statement".

Restriction on DETERMINISTIC

You cannot specify DETERMINISTIC for a nested function.

根据官网说明修改函数和包头说明:

包体修改如下

 FUNCTION Get_Is_Allow_Contract(

pm_no_         IN NUMBER,

pm_revision_   IN VARCHAR2) RETURN VARCHAR2 DETERMINISTIC

IS

包头修改如下

 FUNCTION Get_Is_Allow_Contract(

 pm_no_         IN NUMBER,

 pm_revision_   IN VARCHAR2) RETURN VARCHAR2 DETERMINISTIC;

 创建基于函数的索引:

 create index pm_test_1 on PM_ACTION_CALENDAR_PLAN_TAB(PM_ACTION_CALENDAR_PLAN_API.Get_Is_Allow_Contract(pm_no,pm_revision)) parallel 16;

 alter index pm_test_1 noparallel;

测试性能语句:


select /*+ noparallel*/

 OBJID,

 OBJVERSION,

 OBJSTATE,

 OBJEVENTS,

 IFSAPP.PM_ACTION_CALENDAR_PLAN_API.Get_Site(PM_NO, PM_REVISION),

 PM_NO,

 PM_REVISION,

 IFSAPP.PM_ACTION_API.GET_DESCRIPTION(PM_NO, PM_REVISION),

 IFSAPP.PM_ACTION_API.Get_Rounddef_Id(pm_no, PM_REVISION),

 IFSAPP.PM_ACTION_API.Get_Description(pm_no, PM_REVISION),

 IFSAPP.PM_ACTION_API.Get_Action_Code_Id(pm_no, PM_REVISION),

 IFSAPP.PM_ACTION_API.Get_Action_Descr(pm_no, PM_REVISION),

 SEQ_NO,

 PLANNED_DATE,

 PLANNED_WEEK,

 MCH_CODE_CONTRACT,

 MCH_CODE,

 IFSAPP.Maintenance_Object_Api.Get_Mch_Name(MCH_CODE_CONTRACT, MCH_CODE),

 COMPLETION_DATE,

 REMARK,

 SIGNATURE,

  IFSAPP.PERSON_INFO_API.Get_Name(SIGNATURE),

 STATE,

 IFSAPP.PM_ACTION_CALENDAR_PLAN_API.Get_Mch_Code(PM_NO, PM_REVISION),

 IFSAPP.PM_ACTION_CALENDAR_PLAN_API.Get_Mch_Desc(PM_NO, PM_REVISION),

 COMPANY,

 IFSAPP.PM_ACTION_CALENDAR_PLAN_API.Get_PM_TYPE(PM_NO, PM_REVISION),

 IFSAPP.WORK_ORDER_API.Get_Wo_Status_Id(WO_NO),

 PM_GENERATEABLE_DB

 from IFSAPP.REGULAR_WORK;


 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31134212/viewspace-2100704/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31134212/viewspace-2100704/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值