支持存储过程,包中关联数组索引列使用varchar2类型

本文介绍了LightDB24.1版本对Oracle中联合数组索引列类型的支持,允许使用VARCHAR2类型,展示了在存储过程、函数和包中使用示例,以及如何调用这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

支持存储过程,包中关联数组索引列使用varchar2类型

背景

在业务产品中,存在 oracle 移植过来的 sql 语句。它们在创建存储过程,函数,包时使用联合数组。联合数组的索引列存在使用 varchar2 类型的情况。在 lightdb 24.1 版本之前 lightdb 联合数组索引列只支持使用 varchar,int 两种类型。lightdb 24.1 对联合数组索引列使用 varchar2 类型进行了支持。

联合数组语法
TYPE type_name IS TABLE OF element_type
	INDEX BY key_type; 

key_type 支持使用 varchar,varchar2 ,int 类型。

使用示例

匿名块中使用

DECLARE
  -- Associative array indexed by string:
  
  TYPE population IS TABLE OF NUMERIC  -- Associative array type
    INDEX BY VARCHAR2(10111111);            --  indexed by string
  
  city_population  population;        -- Associative array variable

BEGIN
  -- Add elements (key-value pairs) to associative array:
  city_population('Smallville')  := 2000;
  city_population('Midland')     := 750000;
  city_population('Megalopolis') := 1000000;

  raise info 'Midland is %', city_population('Midland');
  raise info 'Smallville is %', city_population('Smallville');
  raise info 'Megalopolis is %', city_population('Megalopolis');

END;
/

在这里插入图片描述
在存储过程中使用

CREATE OR REPLACE PROCEDURE print_gender(s_name VARCHAR(20)) AS
DECLARE
	  TYPE population IS TABLE OF NUMERIC  -- Associative array type
    INDEX BY VARCHAR2(64);            --  indexed by string
   p population;
BEGIN
p('1') := 1;
p('2') := 2;
p('3') := 3;
	RAISE NOTICE '%:%',s_name, p('1') ;
END;
/
CALL print_gender('huaicheng');

在这里插入图片描述
在函数中使用

CREATE or REPLACE FUNCTION myfunc(v VARCHAR(20)) return int
is
DECLARE
  TYPE population IS TABLE OF NUMERIC  -- Associative array type
    INDEX BY VARCHAR2(64);            --  indexed by string
   p population;
begin
p('1') := 1;
p('2') := 2;
p('3') := 3;
return p(v);
end;
/
select myfunc('1');
select myfunc('2');

在这里插入图片描述
在包中使用

create or replace package typkg
as
  TYPE population IS TABLE OF text  -- Associative array type
    INDEX BY oracle.VARCHAR2(64);            --  indexed by string
	
p population;
PROCEDURE print_gender(s_name VARCHAR(20));
function myfunc(v VARCHAR(20)) return int;
end;
/

create or replace package body typkg
as
PROCEDURE print_gender(s_name VARCHAR(20))
is
begin
p('1') := '1';
p('2') := '2';
p('3') := '3';
  raise info '% is %', s_name, p('1');
end;

function myfunc(v VARCHAR(20)) return int
is
begin
p('1') := 1;
p('2') := 2;
p('3') := 3;
  raise info 'Midland is %', p('1');
return p(v);
end;
end;
/

select typkg.myfunc('1');
call typkg.print_gender('huaicheng');

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值