加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 15:11:21 所属栏目:百科 来源:网络整理
导读:是否有内置函数来确定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_lin
是否有内置函数来确定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','A');

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

show errors

drop type t_test;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读