oracle组合数据类型,oracle复合数据类型-相关方法

oracle提供了一些内置的函数和方法来操作复合数据类型。

一、count 返回集合中的元素的个数

declare

type ename_table_type is table of varchar2(20) index by binary_integer ;

ename_table ename_table_type ;

begin

for i in 1..5 loop

ename_table(i):='a'||i ;

end loop ;

dbms_output.put_line('元素个数:'||ename_table.count) ;

for c in 1..ename_table.count loop

dbms_output.put_line(ename_table(c)) ;

end loop ;

end ;

二、exists 用于确定集合元素是否存在,如果存在则返回true,否则返回false

SQL> declare

2 type ename_table_type is table of varchar2(20);

3 ename_table ename_table_type ;

4 BEGIN

5       IF ename_table.exists(1) THEN

6             ename_table(1):='scot' ;

7       ELSE

8            dbms_output.put_line('嵌套表使用前要初始化');

9       END if ;

10 end;

11 /

嵌套表使用前要初始化

PL/SQL procedure successfully completed

三、first&last first返回集合第一个元素的下标,last返回集合最后一个元素的下标。

SQL> DECLARE

2 TYPE ename_varray_type IS table OF varchar2(20) INDEX BY binary_integer;

3 ename_varray ename_varray_type ;

4 BEGIN

5       ename_varray(1):='mary' ;

6       ename_varray(4):='scott' ;

7       ename_varray(5):='tiger' ;

8       ename_varray(7):='lucy' ;

9       dbms_output.put_line('第一个元素下标:'||ename_varray.first);

10       dbms_output.put_line('最后个元素下标:'||ename_varray.last);

11 end ;

12 /

第一个元素下标:1

最后个元素下标:7

PL/SQL procedure successfully completed

四、prior&next prior返回当前元素前一个元素的下标,next返回当前元素下一下元素的下标

SQL> DECLARE

2 TYPE ename_varray_type IS table OF varchar2(20) INDEX BY binary_integer;

3 ename_varray ename_varray_type ;

4 BEGIN

5       ename_varray(1):='mary' ;

6       ename_varray(4):='scott' ;

7       ename_varray(5):='tiger' ;

8       ename_varray(7):='lucy' ;

9       dbms_output.put_line('元素5的前一个元素下标:'||ename_varray.prior(5));

10       dbms_output.put_line('元素5的后一个元素下标:'||ename_varray.next(5));

11 end ;

12 /

元素5的前一个元素下标:4

元素5的后一个元素下标:7

PL/SQL procedure successfully completed

五、delete

DECLARE

TYPE ename_varray_type IS table OF varchar2(20) INDEX BY binary_integer;

ename_varray ename_varray_type ;

BEGIN

ename_varray(1):='mary' ;

ename_varray(4):='scott' ;

ename_varray(5):='tiger' ;

ename_varray(6):='lucy' ;

ename_varray(7):='LILI' ;

ename_varray(8):='join' ;

ename_varray(9):='wzj' ;

FOR c IN 1..ename_varray.count LOOP

IF ename_varray.exists(c) then

dbms_output.put_line('下标为'||c||'的值为:'||ename_varray(c));

END IF ;

END loop ;

ename_varray.delete(5);

dbms_output.put_line('删除下标为5的元素之后');

FOR c IN 1..ename_varray.count LOOP

IF ename_varray.exists(c) then

dbms_output.put_line('下标为'||c||'的值为:'||ename_varray(c));

END IF ;

END loop ;

ename_varray.delete(8,9);

dbms_output.put_line('删除下标为8,9的元素之后');

FOR c IN 1..ename_varray.count LOOP

IF ename_varray.exists(c) then

dbms_output.put_line('下标为'||c||'的值为:'||ename_varray(c));

END IF ;

END loop ;

end ;

delete删除所有元素,delete(n)删除下标为n的元素,delete(m,n)删除下标元素在[m,n]中的元素。

六、extend   只用于嵌套表和变长数组,用来扩展元素个数

SQL> DECLARE

2 TYPE ename_varray_type IS varray(10) OF varchar2(20);

3 ename_varray ename_varray_type :=ename_varray_type('');

4 BEGIN

5      FOR c IN 1..9 LOOp

6          ename_varray(c):='a'||c ;

7          ename_varray.extend ;

8      END LOOP ;

9      FOR c IN 1..ename_varray.count LOOP

10         dbms_output.put_line('下标为'||c||'的元素为:'||ename_varray(c));

11      END LOOP ;

12 end ;

13 /

下标为1的元素为:a1

下标为2的元素为:a2

下标为3的元素为:a3

下标为4的元素为:a4

下标为5的元素为:a5

下标为6的元素为:a6

下标为7的元素为:a7

下标为8的元素为:a8

下标为9的元素为:a9

下标为10的元素为:

PL/SQL procedure successfully completed

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
复合主键是指一个表中的主键由多个字段组成的情况。在Oracle中,可以通过在创建表时使用约束来定义复合主键。例如,可以使用以下语法创建一个具有复合主键的表: create table 表名 ( 字段1 数据类型 not null, 字段2 数据类型 not null, constraint PK_表名 primary key (字段1, 字段2) ) 这样,字段1和字段2将组成复合主键。复合主键的作用是确保表中的每一行都具有唯一的组合值。这意味着在插入或更新数据时,系统会检查复合主键的值是否已经存在,如果存在则会报错。 需要注意的是,Oracle中一个表只允许有一个主键,但一个主键可以由多个字段构成复合主键。复合主键的使用条件是当查询语句的where条件中包含复合索引的第一列时,才会使用索引。如果查询语句中没有包含复合索引的第一列,Oracle将不会使用复合索引。这是因为Oracle默认使用B*树索引,而B树的复合索引指向的是第一列的元素索引,如果不包括第一列则无法找到索引源头从而无法使用索引。\[1\]\[2\] 总结起来,Oracle中可以通过在创建表时使用约束来定义复合主键,复合主键由多个字段组成。复合主键的作用是确保表中的每一行都具有唯一的组合值。复合主键的使用条件是当查询语句的where条件中包含复合索引的第一列时,才会使用索引。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [oracle 复合主键](https://blog.csdn.net/weixin_34418883/article/details/92339550)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [关于复合主键查询时使用索引研究](https://blog.csdn.net/weixin_42394573/article/details/116389737)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Oracle数据库联合主键](https://blog.csdn.net/long_long_ago1/article/details/82670911)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值