基于自定义函数的
留言版上的第2330号问题是:
在oralce中给自建函数创建索引,结果不成功。
source:Create Index IDX_T_SP_TWOTYPESTAT_0_f On T_SP_TWOTYPESTAT_0(f_dateadd(yearmonth,12,2));
err:the function is not deterministic.
我们看一下这是为什么?
单注奖金为28.59万。当期我省达州彩民赢得幸运 随便一个测试可以再现这个问题,我门创建一个函数(本范例函数用于进行16进制向10进制转换):
CREATE OR REPLACE FUNCTION h2ten (
p_str IN VARCHAR2,
p_from_base IN NUMBER DEFAULT 16
)
RETURN NUMBER
IS
l_num NUMBER DEFAULT 0;
l_hex VARCHAR2 (16) DEFAULT \'ABCDEF\';
BEGIN
FOR i IN 1 .. LENGTH (p_str)
LOOP
l_num :=
l_num * p_from_base + INSTR (l_hex, UPPER (SUBSTR (p_str, i, 1)))
- 1;
END LOOP;
RETURN l_num;
END h2ten;
此时创建索引,获得如下错误信息:
SQL create table t as select username,\'a\' hex from dba_users;
Table created
SQL create index i_t on t (h2ten(hex));
create index i_t on t (h2ten(hex))
ORA-30553: The function is not deterministic
如果需要创建基于自定义函数的索引,那么我们需要指定deterministic参数:
CREATE OR REPLACE FUNCTION h2ten (
p_str IN VARCHAR2,
p_from_base IN NUMBER DEFAULT 16
)
RETURN NUMBER DETERMINISTIC
IS
l_num NUMBER DEFAULT 0;
l_hex VARCHAR2 (16) DEFAULT \'ABCDEF\';
BEGIN
FOR i IN 1 .. LENGTH (p_str)
LOOP
l_num :=
l_num * p_from_base + INSTR (l_hex, UPPER (SUBSTR (p_str, i, 1)))
- 1;
END LOOP;
RETURN l_num;
END h2ten;
此时创建索引即可:
SQL create index i_t on t (h2ten(hex));
Index created
Oracle这样解释这个参数:
The hint DETERMINISTIC helps the optimizer avoid redundant function calls. If a stored function was called previously with the same arguments, the optimizer can elect to use the previous result. The function result should not depend on the state of session variables or schema objects. Otherwise, results might vary across calls. Only DETERMINISTIC functions can be called from a function-based index or a materialized view that has query-rewrite enabled.
查看本文来源
重庆无痛人流呼和浩特治疗妇科哪家医院好
太原宫颈糜烂治疗费用
- 朱单伟又订婚了,女方毕恭毕敬向大衣哥敬茶,正式改口叫“小弟”
- 想申请TOP商学院毕业生必不可少的,你还不知道?
- “电视点名表扬”4位流量艺人,易烊千玺上榜,唯一的歌星是她
- 邮储银行济宁市分行实行员工分类差异化管理者, 持续开展案防“月月考”工作
- 奠基石百年学府!曲师大举行曲阜校区扩建项目竣工仪式
- 对话名家 | 马平:把生命的却是放进故事中
- 苹果VR/AR头盔曝光 传了10年的死讯终于要实现了吗?
- 人到了一定的年龄,才知道太过善良,多半得不偿失!
- 拍好人像设备很重要,看看这三款手机展示出如何?
- 祥硕将发表USB 4主机控制器芯片组
- 高圆圆3岁女儿罕见出镜!探班外婆抱一起扭来扭去,穿搭太可爱
- 2022年上半年深圳10+1区GDP排行曝光!深圳宣布将全面加大投资力度