gpt4 book ai didi

oracle - 获取 PL/SQL 集合中元素的索引

转载 作者:行者123 更新时间:2023-12-04 10:57:44 24 4
gpt4 key购买 nike

是否有内置函数来确定 PL/SQL 集合中元素的(第一个)索引?

就像是

DECLARE
TYPE t_test IS TABLE OF VARCHAR2(1);
v_test t_test;
BEGIN
v_test := NEW t_test('A', 'B', 'A');
dbms_output.put_line( 'A: ' || get_index( v_test, 'A' ) );
dbms_output.put_line( 'B: ' || get_index( v_test, 'B' ) );
dbms_output.put_line( 'C: ' || get_index( v_test, 'C' ) );
END;
A: 1
B: 2
C:

我可以根据需要使用关联数组、嵌套表或可变数组。如果同一个元素存在不止一次,那么第一次出现的索引就足够了。

否则我必须做类似的事情
CREATE FUNCTION get_index ( in_test IN t_test, in_value IN VARCHAR2 )
RETURN PLS_INTEGER
AS
i PLS_INTEGER;
BEGIN

i := in_test.FIRST;
WHILE( i IS NOT NULL ) LOOP
IF( in_test(i) = in_value ) THEN
RETURN i;
END IF;

i := in_test.NEXT(i);
END LOOP;

RETURN NULL;

END get_index;

最佳答案

不确定,如果这真的有帮助,或者您认为它更优雅:

create type t_test as table of varchar2(1);
/

DECLARE
--TYPE t_test IS TABLE OF VARCHAR2(1);
v_test t_test;

function get_index(q in t_test, c in varchar2) return number is
ind number;
begin
select min(rn) into ind from (
select column_value cv, rownum rn
from table(q)
)
where cv = c;

return ind;
end get_index;

BEGIN
v_test := NEW t_test('A', 'B', 'A');

dbms_output.put_line( 'A: ' || get_index( v_test, 'A' ) );
dbms_output.put_line( 'B: ' || get_index( v_test, 'B' ) );
dbms_output.put_line( 'C: ' || get_index( v_test, 'C' ) );
END;
/

show errors

drop type t_test;

关于oracle - 获取 PL/SQL 集合中元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4817149/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com