首页 > 数据库 >Oracle_数组

Oracle_数组

时间:2023-04-14 11:05:33浏览次数:33  
标签:name -- user 数组 Oracle table arry

 

Oracle数组一般可以分为固定数组和可变数组

集合:是具有相同定义的元素的聚合。Oracle有两种类型的集合:

可变长数组(VARRAY):可以有任意数量的元素,但必须预先定义限制值。

嵌套表:视为表中之表,可以有任意数量的元素,不需要预先定义限制值。

在PL/SQL中是没有数组(Array)概念的。但是如果程序员想用Array的话,就得变通一下,用TYPE   和Table   of   Record来代替多维数组,一样挺好用的。

 

固定数组

-- ============ char array =============== 

DECLARE 

  -- declare fixed array 

  TYPE arry_var IS VARRAY(2) OF VARCHAR2(10); 

  arry_name arry_var; 

BEGIN 

  -- init array 

  arry_name := arry_var('tom', 'jim','tim'); 

 

  for i in 1..arry_name.count loop  

      dbms_output.put_line(arry_name(i));  

  end loop;  

END; 

-- ================ number array ======== 

DECLARE 

  -- declare fixed array 

  TYPE arry_num IS VARRAY(10) OF NUMBER; 

  arry_top arry_num; 

BEGIN 

  -- init array 

  arry_top := arry_num(1,2,3); 

 

  dbms_output.put_line(arry_top(1)); 

  dbms_output.put_line(arry_top(2)); 

END;

1 VARRAY(10)变数数组大小为10

2OF NUMBER 表示数值类型是number

可变数组

一维数组

DECLARE 

  TYPE t_table IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER; 

  v_table t_table; 

  v_cnt   NUMBER; 

BEGIN 

  v_table(1) := '1'; 

  v_table(2) := '3'; 

  v_table(3) := '9'; 

 

  v_cnt := v_table.COUNT; 

  FOR i IN 1 .. v_cnt LOOP 

    dbms_output.put_line(v_table(i)); 

    END LOOP; 

END;

多维数组

1 Create Table

create table XXUSER 

  USER_ID   NUMBER, 

  USER_NAME VARCHAR2(255), 

  SEX       VARCHAR2(2), 

  AGE       NUMBER(3), 

  ADDRESS   VARCHAR2(2000) 

)

2 定义结果集(Record)

存放xxuser的部分字段

DECLARE 

  -- only 2 fileds 

  TYPE t_record_user IS RECORD( 

    user_id   xxuser.user_id%type, 

    user_name xxuser.user_name%type); 

 

  TYPE t_user IS TABLE OF t_record_user INDEX BY BINARY_INTEGER; 

 

  v_arry_user t_user; 

BEGIN 

  SELECT user_id, user_name BULK COLLECT INTO v_arry_user FROM xxuser; 

  FOR i IN 1 .. v_arry_user.COUNT LOOP 

    dbms_output.put_line(v_arry_user(i).user_name); 

  END LOOP; 

END;

3 使用ROWTYPE

存放xxuser的全部字段,比Record简洁。

DECLARE 

  -- ALL,XXUser(user_id, user_name, sex, age, address) 

  TYPE t_user IS TABLE OF xxuser%ROWTYPE INDEX BY BINARY_INTEGER; 

 

  v_arry_user t_user; 

BEGIN 

  SELECT * BULK COLLECT INTO v_arry_user FROM xxuser; 

  FOR i IN 1 .. v_arry_user.COUNT LOOP 

    dbms_output.put_line(v_arry_user(i).user_name || v_arry_user(i).sex); 

  END LOOP; 

END;

标签:name,--,user,数组,Oracle,table,arry
From: https://blog.51cto.com/u_16070335/6189663

相关文章

  • rust数组
    概述rust中数组分为两类:长度固定的array动态数组vectorarray的效率比vector高,array存栈上,vector存堆上arrayfnmain(){//[类型;长度]leta:[i32;5]=[1,2,3,4,5];}数组元素类型要统一,长度要固定数组快速初始化rust下面这种初始化,针对有//类似memset(arr......
  • 【前缀和】LeetCode 1031. 两个非重叠子数组的最大和
    题目链接1031.两个非重叠子数组的最大和思路代码classSolution{publicintmaxSumTwoNoOverlap(int[]nums,intfirstLen,intsecondLen){//求一个前缀和for(inti=1;i<nums.length;++i){nums[i]+=nums[i-1];}......
  • ORA-00942 Table or View Does Not Exist Oracle Error
    Cause:java.sql.SQLException:ORA-00942:tableorviewdoesnotexistThenItrytorunthesqlstatementthatthewebapptryingtoexecutebeforehittingthiserroranditreturnstheresultswithoutanyerror.Thevendorgivemethefeedbackthattheta......
  • 【DP】【分治】LeetCode 53. 最大子数组和
    题目链接[https://leetcode.cn/problems/maximum-subarray/description/](53.最大子数组和"https://leetcode.cn/problems/maximum-subarray/description/")思路分析动态规划题目的时候只需要考虑最后一个阶段,因为所有的阶段转化都是相同的,考虑最后一个阶段容易发现规律在数......
  • 使用java.util.zip对生成的字节数组输出文件流 进行打包压缩(单个、批量),并返回压缩包
    废话不多说直接上代码 packagegov.test.util;importjava.io.ByteArrayInputStream;importjava.io.ByteArrayOutputStream;importjava.io.IOException;importjava.util.List;importjava.util.Map;importorg.apache.tools.zip.ZipEntry;importorg.apache.tools.zip.Zip......
  • POJ 1226 Substrings (后缀数组)
    题目地址:POJ1226将每一个字符串反转连接一次,再把所有字符串都连接起来,然后二分,找最大长度。注意与反转字符串之间不能直接相连。代码如下:#include<iostream>#include<string.h>#include<math.h>#include<queue>#include<algorithm>#include<stdlib.h>#include<ma......
  • POJ 2774 Long Long Message (后缀数组)
    题目地址:POJ2774后缀数组第一发!后缀数组真是太神奇了。。(好像每学一种新算法我都会这么说。。原理研究了好长时间,还有代码的实现,论文作者罗穗骞的代码太简洁。。好难看懂QAQ,看了好长时间。来一发后缀数组模板题,模板是用的倍增思想。代码如下:#include<iostream>#include......
  • js中一个移除对象中子数组中空值的函数
    js中一个移除对象中子集数组中空值(null,undefined)的函数functionremoveNull(obj){letdelarr=[];for(letiinobj){//排除法寻找对象类型if(typeof(obj[i])==='boolean'||typeof(obj[i])==='string'||typeof(obj[i])==......
  • oracle 字段大于某段时间
    精确到年月日时分秒,根据要求可精确到指定的日期时间:Oracle数据库时间字段>to_date(‘2020/10/19:38:51’,‘YYYY/MM/DDHH24:MI:SS’);......
  • 数组的元素查找排序
    顺序查找顺序查找:挨个查看要求:对数组元素的顺序没要求publicstaticvoidarraySearch(intvalue){int[]arr={4,5,6,1,9};//intvalue=1;intindex=-1;for(inti=0;i<arr.length;i++){if(arr[i]......