Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于Oracle函数的索引:修改确定性函数?_Oracle_Indexing_Plsql_Deterministic - Fatal编程技术网

基于Oracle函数的索引:修改确定性函数?

基于Oracle函数的索引:修改确定性函数?,oracle,indexing,plsql,deterministic,Oracle,Indexing,Plsql,Deterministic,我正在使用一个自己的确定性函数作为基于一个表的函数索引。 如果修改此函数的PL/SQL代码,会发生什么?(位于包装中) 索引会失效吗?我必须(手动)重建它吗 谢谢 编辑: 下面是我的示例脚本,我现在使用它进行测试 CREATE OR REPLACE FUNCTION func_test(v IN NUMBER) RETURN VARCHAR deterministic IS BEGIN RETURN 'lol' || To_Char(v); END; / CREATE TABLE tab_te

我正在使用一个自己的确定性函数作为基于一个表的函数索引。 如果修改此函数的PL/SQL代码,会发生什么?(位于包装中)

索引会失效吗?我必须(手动)重建它吗

谢谢

编辑:

下面是我的示例脚本,我现在使用它进行测试

CREATE OR REPLACE FUNCTION func_test(v IN NUMBER) RETURN VARCHAR deterministic IS
BEGIN RETURN 'lol' || To_Char(v); END;
/

CREATE TABLE tab_test (id NUMBER(20,0)  NOT NULL);
INSERT INTO tab_test VALUES (1);
INSERT INTO tab_test VALUES (2);
INSERT INTO tab_test VALUES (3);

CREATE INDEX idx_test ON tab_test (func_test(id));

SELECT id, func_test(id) FROM tab_test WHERE func_test(id) = func_test(2);

  --1 first records fetched in 0 ms
  --
  --| 2 | lol2 |


--Change Function
CREATE OR REPLACE FUNCTION func_test(v IN NUMBER) RETURN VARCHAR deterministic IS
BEGIN RETURN 'rofl' || To_Char(v); END;
/

SELECT id, func_test(id) FROM tab_test WHERE func_test(id) = func_test(2);

  -- 0 first records fetched in 0 ms

ALTER INDEX idx_test rebuild;

SELECT id, func_test(id) FROM tab_test WHERE func_test(id) = func_test(2);

  --1 first records fetched in 0 ms
  --
  --| 2 | rofl2 |

DROP TABLE tab_test;
DROP FUNCTION func_test;

是的,您必须重建索引

在“基于函数的索引的缺点”一节中检查此链接


索引确实存储物理数据,无论是基于函数还是其他。如果修改基础的确定性函数,索引将不再包含有效数据,您必须手动重新生成并在以后进行分析。

感谢您提供的链接,同时,我编写了一个测试脚本,说明了这个问题。