当前位置: 首页 > 工具软件 > indices_view > 使用案例 >

oracle indices,Oracle PL/SQL INDICES

张敏达
2023-12-01

Indices关键字主要用于处理稀疏数组的处理。

FORALL..IN 1..array.count, 当array稀疏时,会提示错误,某个元素不存在。

这个时候,使用indices可以跳过此影响。indices关键字在FORALL中表示引用数组下标

FORALL i IN INDICES OF l_tab

INSERT INTO forall_test VALUES l_tab (i);

测试脚本:

DECLARE

TYPE t_forall_test_tab IS TABLE OF forall_test%ROWTYPE;

l_tab t_forall_test_tab := t_forall_test_tab();

BEGIN

FOR i IN 1 .. 1000 LOOP

l_tab.extend;

l_tab(l_tab.last).id := i;

l_tab(l_tab.last).code := to_char(i);

l_tab(l_tab.last).description := 'Description: ' || to_char(i);

END LOOP;

-- Make collection sparse.

l_tab.delete(301);

l_tab.delete(601);

l_tab.delete(901);

dbms_output.put_line('l_tab.count = '||l_tab.count);

EXECUTE IMMEDIATE 'truncate TABLE forall_test';

dbms_output.put_line('start forall');

BEGIN

-- This will fail due to sparse collection.

FORALL i IN l_tab.first .. l_tab.last

INSERT INTO forall_test VALUES l_tab (i);

EXCEPTION

WHEN OTHERS THEN

dbms_output.put_line(SQLERRM);

END;

EXECUTE IMMEDIATE 'truncate TABLE forall_test';

dbms_output.put_line('start FORALL INDICES of');

-- This works fine with sparse collections.

FORALL i IN INDICES OF l_tab

INSERT INTO forall_test VALUES l_tab (i);

--这里会抛错,提示index[301]元素不存在

/*FORALL i IN 1..l_tab.count

INSERT INTO forall_test VALUES l_tab (i);*/

END;

脚本输出:

l_tab.count = 997

start forall

ORA-22160: element at index [301] does not exist

start FORALL INDICES of

另有VALUES OF,表示引用数组的值。

DECLARE

TYPE t_forall_test_tab IS TABLE OF forall_test%ROWTYPE;

TYPE t_idx_tab IS TABLE OF BINARY_INTEGER;

l_tab     t_forall_test_tab := t_forall_test_tab();

l_idx_tab t_idx_tab := t_idx_tab();

BEGIN

FOR i IN 1 .. 1000 LOOP

l_tab.extend;

l_tab(l_tab.last).id := i;

l_tab(l_tab.last).code := to_char(i);

l_tab(l_tab.last).description := 'Description: ' || to_char(i);

IF MOD(i, 100) = 0 THEN

l_idx_tab.extend;

l_idx_tab(l_idx_tab.last) := i;

END IF;

END LOOP;

EXECUTE IMMEDIATE 'truncate TABLE forall_test';

-- This works fine with sparse collections.

FORALL i IN VALUES OF l_idx_tab

INSERT INTO forall_test VALUES l_tab (i);

/*

FORALL i IN  1..l_idx_tab.count

INSERT INTO forall_test VALUES l_tab (i);*/

END;

脚本取自:

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

 类似资料:

相关阅读

相关文章

相关问答