–参考文章: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. 【特别的骚气】asp.net core运行时注入服务,实现类库热插拔

    引言 很久之前在群里有看到说asp.net core能不能在运行时注入程序,当时并没有太在意,刚才在某个群里又看到有人再问,core能不能在运行时注入服务,闲来无事,我就研究了一下,其实也比较简单,在 ...

  2. [转帖]GC日志解读,这次别再说看不懂GC日志了

    https://juejin.cn/post/7029130033268555807   测试环境:机器内存16G,JDK 8,12核CPU 测试用例,从网上找的示例,视情况修改即可:   java ...

  3. [转帖]jdbc连接mysql设置session variables 参数变量

    目录 两种方式 连接串设置[^1] 执行语句中设置 两种方式 url连接串中设置 执行语句中设置 连接串设置1 sessionVariables jdbc.url=jdbc:mysql://xxxx. ...

  4. [转帖]【压测】通过Jemeter进行压力测试(超详细)

    文章目录 背景 一.前言 二.关于JMeter 三.准备工作 四.创建测试 4.1.创建线程组 4.2.配置元件 4.3.构造HTTP请求 4.4.添加HTTP请求头 4.5.添加断言 4.6.添加察 ...

  5. 六个节点三主三从Redis集群最简单搭建方法

    背景 一个服务器上面的三主三从的界面太low,容易出问题. 为了验证高可用, 我这边使用六台机器进行了三主三从的搭建. 模仿开源版的一键搭建集群的脚本进行使用,感觉非常简单,这里简单进行一下总结. 环 ...

  6. 【DP】DMOPC '21 Contest 8 P5 - Tree Building

    Problem Link 给定 \(n,m\) 和一个长为 \(m\) 的代价序列,对于一棵 \(n\) 个节点,每个节点度数不超过 \(m\) 的树,定义它的代价为 \(\sum\limits_{i ...

  7. 【K哥爬虫普法】辛苦钱被中间商抽走八成,还因此锒铛入狱

    我国目前并未出台专门针对网络爬虫技术的法律规范,但在司法实践中,相关判决已屡见不鲜,K 哥特设了"K哥爬虫普法"专栏,本栏目通过对真实案例的分析,旨在提高广大爬虫工程师的法律意识, ...

  8. 深入浅出Java多线程(一):进程与线程

    引言 大家好,我是你们的老伙计秀才. 在计算机系统的发展历程中,早期的计算机操作模式十分单一和低效.用户只能逐条输入指令,而计算机则按照接收指令的顺序逐一执行,一旦用户停止输入或进行思考,计算机会处于 ...

  9. 领域知识图谱-中式菜谱知识图谱:实现知识图谱可视化和知识库智能问答系统(KBQA)

    领域知识图谱-中式菜谱知识图谱:实现知识图谱可视化和知识库智能问答系统(KBQA) A knowledge graph for Chinese cookbook(中式菜谱知识图谱),可以实现知识图谱可 ...

  10. 【三】分布式训练---单机多卡与多机多卡组网(飞桨paddle2.0+)更加推荐spawn方式!

    1. 单机多卡启动并行训练 飞桨2.0增加paddle.distributed.spawn函数来启动单机多卡训练,同时原有的paddle.distributed.launch的方式依然保留. padd ...