–参考文章:http://www.oracle.com/technetwork/issue-archive/2014/14-sep/o54plsql-2245345.html
–SAMPLE DATA
店名 商品 销量
A APPLE 3000
A BANANA 2000
B APPLE 5000
B MELON 100

–CONSTRUCT PACKAGE
CREATE OR REPLACE PACKAGE p_nested_array IS
SUBTYPE prod_name IS VARCHAR2(200);
SUBTYPE store_name IS VARCHAR2(200);
c_was_processed CONSTANT BOOLEAN := TRUE;

TYPE t_prod_qty IS TABLE OF NUMBER(10) INDEX BY prod_name;
TYPE t_store_prod_qty IS TABLE OF t_prod_qty INDEX BY store_name;
store_prod_qty_t t_store_prod_qty;

PROCEDURE reset_store_prod_qty;
FUNCTION already_store_prod(store_name_in VARCHAR2,
prod_name_in VARCHAR2) RETURN BOOLEAN;
PROCEDURE add_store_prod_qty(store_name_in VARCHAR2,
prod_name_in VARCHAR2,
qty_in NUMBER);
FUNCTION find_store_prod_qty(store_name_in VARCHAR2,
prod_name_in VARCHAR2) RETURN NUMBER;
PROCEDURE print_store_prod_qty;
END p_nested_array;
/

CREATE OR REPLACE PACKAGE BODY p_nested_array IS
PROCEDURE reset_store_prod_qty IS
BEGIN
store_prod_qty_t.DELETE;
END reset_store_prod_qty;

FUNCTION already_store_prod(store_name_in VARCHAR2,
prod_name_in VARCHAR2) RETURN BOOLEAN IS

BEGIN
IF store_prod_qty_t(store_name_in) (prod_name_in) IS NOT NULL THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
WHEN no_data_found THEN
RETURN FALSE;
END already_store_prod;

PROCEDURE add_store_prod_qty(store_name_in VARCHAR2,
prod_name_in VARCHAR2,
qty_in NUMBER) IS
BEGIN
store_prod_qty_t(store_name_in)(prod_name_in) := qty_in;
END add_store_prod_qty;

FUNCTION find_store_prod_qty(store_name_in VARCHAR2,
prod_name_in VARCHAR2) RETURN NUMBER IS
BEGIN
RETURN store_prod_qty_t(store_name_in)(prod_name_in);
EXCEPTION
WHEN no_data_found THEN
RETURN NULL;
END find_store_prod_qty;

PROCEDURE print_store_prod_qty IS
store_name_idx store_name;
prod_name_idx prod_name;
BEGIN
store_name_idx := store_prod_qty_t.FIRST;
dbms_output.put_line(‘store_name_idx: ’ || store_name_idx);
WHILE store_name_idx IS NOT NULL LOOP
prod_name_idx := store_prod_qty_t(store_name_idx).FIRST;
–(store_prod_qty_t(store_name_idx).FIRST);
WHILE prod_name_idx IS NOT NULL LOOP
dbms_output.put_line(store_name_idx || ‘–’ || prod_name_idx || ‘: ’ ||
store_prod_qty_t(store_name_idx) (prod_name_idx));
prod_name_idx := store_prod_qty_t(store_name_idx).NEXT(prod_name_idx);
–(store_prod_qty_t(store_name_idx).NEXT(prod_name_idx));
END LOOP;

  store_name_idx := store_prod_qty_t.NEXT(store_name_idx);
END LOOP; /* error raised
FOR i IN store_prod_qty_t.FIRST .. store_prod_qty_t.LAST LOOP
FOR j IN store_prod_qty_t(i).FIRST .. store_prod_qty_t(i).LAST LOOP
dbms_output.put_line('Store ' || i || ' saled ' || store_prod_qty_t(i)
(j) || ' ' || j || '.');
END LOOP;
END LOOP;*/

END print_store_prod_qty;

END p_nested_array;
/

–TEST SCRIPT
DECLARE
BEGIN
P_NESTED_ARRAY.RESET_STORE_PROD_QTY;
P_NESTED_ARRAY.ADD_STORE_PROD_QTY(‘A’,’APPLE’,3000);
P_NESTED_ARRAY.ADD_STORE_PROD_QTY(‘A’,’BANANA’,2000);
P_NESTED_ARRAY.ADD_STORE_PROD_QTY(‘B’,’APPLE’,5000);

IF NOT P_NESTED_ARRAY.ALREADY_STORE_PROD(‘B’,’MELON’) THEN
P_NESTED_ARRAY.ADD_STORE_PROD_QTY(‘B’,’MELON’,100);
ELSE
DBMS_OUTPUT.PUT_LINE(‘Store B”s MELON saled ‘||P_NESTED_ARRAY.FIND_STORE_PROD_QTY(‘B’,’MELON’)||’.’);
END IF;

DBMS_OUTPUT.PUT_LINE(‘Store B”s MELON saled ‘||P_NESTED_ARRAY.FIND_STORE_PROD_QTY(‘B’,’MELON’)||’.’);

P_NESTED_ARRAY.print_store_prod_qty;

END;
/

–OUTPUT:
Store B’s MELON saled 100.
store_name_idx: A
A–APPLE: 3000
A–BANANA: 2000
B–APPLE: 5000
B–MELON: 100

—-Dylan Presents.

Oracle使用由字符串索引的二维数组的更多相关文章

  1. Java-J2SE学习笔记-字符串转化为二维数组

    1.字符串转化为二维Double数组 2.代码: package Test; public class TestDouble { public static void main(String[] ar ...

  2. C指针 指针和数组 二维数组的指针 指针应用

    直接到变量名标识的存储单元中读取变量的值--直接寻址 通过其他变量间接找到变量的地址读取变量的值--间接寻址 指针变量存放地址 显示变量的地址 指针变量使用前必须初始化,若不知指向哪,可先指向NULL ...

  3. oracle学习之路(四) ---------PL/SQL 表,二维数组(TABLE)

    LOB类型 ORACLE提供了LOB (Large OBject)类型.用于存储大的数据对象的类型.ORACLE眼下主要支持BFILE, BLOB, CLOB 及 NCLOB 类型. NCLOB 存储 ...

  4. tp使用ajaxReturn返回二维数组格式的字符串,前台如何获取非乱码

    参考: https://www.cnblogs.com/jiqing9006/p/5000849.html https://blog.csdn.net/zengxiangxuan123456/arti ...

  5. js二维数组与字符串

    1. 二维数组:数组中的元素,又引用了另一个数组对象 何时使用:只要保存横行竖列的数据, 具有上下级包含关系的数据, 创建二维数组: 1. var arr=[]; col arr[0]=[" ...

  6. ***php解析JSON二维数组字符串(json_decode函数第二个参数True和False的区别)

    客户端的请求体中的数据:[{"msg_id": 1, "msg_status": "HAS_READ" }, { "msg_id& ...

  7. 【C语言学习】-05 二维数组、字符串数组、多维数组

    ⼆二维数组.字符串数组.多维数组

  8. dbda封装类(包括:返回二维数组、Ajax调用返回字符串、Ajax调用返回JSON)

    <?php class DBDA { public $host = "localhost"; public $uid = "root"; public $ ...

  9. C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

    1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include &l ...

  10. word search(二维数组中查找单词(匹配字符串))

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...

随机推荐

  1. [转帖]性能测试工具netperf安装使用

    https://blog.51cto.com/dingtongxue1990/1853714 netperf工具使用 一.安装 1,下载 liunx下载地址:ftp://ftp.netperf.org ...

  2. [转帖]Flink完全分布式集群安装

    https://zhuanlan.zhihu.com/p/131592261 Flink支持完全分布式模式,这时它由一个master节点和多个worker节点构成.在本节,我们将搭建一个如下的三个节点 ...

  3. ebpf 单行程序学习

    ebpf 单行程序学习 背景 公司方神借给我一本: <BPF之巅:洞悉linux系统和应用性能>纸质书 拿回家晚上在沙发上看了几天. 感觉书很厚看的不是很系统. 仅能凭自己的感觉总结一下这 ...

  4. [转帖]nacos discovery和config

    微服务和nacos版本都在2.x及之后. 1.discovery用于服务注册,将想要注册的服务注册到nacos中,被naocs发现. pom引入的依赖是: yml配置文件中: 2.config用于获取 ...

  5. CentOS7 和 CentOS8 安装 rusers-server 然后使用LR 实时监控Linux主机性能的办法

    LR 能够通过RPC 的工具 实时获取 被压测机器的 性能表现 但是需要安装几个组件. CentOS6 时期比较简单 可以通过网上 下载rstatd 的tar 包离线安装即可 但是发现CentOS7 ...

  6. CentOS8 解决 yum元数据下载失败的方法

    背景 最近同事反馈CentOS的机器无法再现安装 rpm包了. 提示信息主要是下载源数据失败. 今天上午抽时间进行了一下简单验证, 晚上进行一下总结. 避免遗忘. 认为与Redhat被IBM收购之后, ...

  7. pytest-assume插件-多重校验

    自动化接口测试我们通常会对一条case设置多条断言,这样就会出现一个问题,如果前面一 个校验不通过,那么后面的校验就不会走到,如下图,可以看到校验走到assert False就不往 下走了,这个时候p ...

  8. R2M分布式锁原理及实践

    作者:京东科技 张石磊 1 案例引入 名词简介: 资源:可以理解为一条内容,或者图+文字+链接的载体. 档位ID: 资源的分类组,资源必须归属于档位. 问题描述:当同一个档位下2条资源同时审批通过时, ...

  9. ClickHouse(08)ClickHouse表引擎概况

    目录 合并树家族 日志引擎系列 集成的表引擎 其他特殊的引擎 资料分享 参考文章 目前ClickHouse的表引擎主要有下面四个系列,合并树家族.日志引擎系列.集成的表引擎和其他特殊的引擎. 合并树家 ...

  10. 4款超好用的AI换脸软件,一键视频直播换脸(附下载链接)

    随着AIGC的火爆,AI换脸技术也被广泛应用于娱乐.广告.电影制作等领域,本期文章系统介绍了市面上超火的4款AI软件 换脸整合包收录了全部4款AI工具,请按照需要选择下载: 百度网盘:https:// ...