基于自定義函數的
留言版上的第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排行曝光!深圳宣布將全面加大投資力度