–参考文章: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. Linux-定时任务-cron

  2. ubuntu-软件管理工具-apt

  3. [转帖]Nginx 保留 Client 真实 IP

    https://lqingcloud.cn/post/nginx-01/#:~:text=%E5%9C%A8%20Nginx%20%E4%B8%AD%E5%8F%AF%E4%BB%A5%E9%80%9 ...

  4. [转帖]谈谈对K8S CNI、CRI和CSI插件的理解

    K8S的设计初衷就是支持可插拔架构,解决PaaS平台不好用.不能用.需要定制化等问题,K8S集成了插件.附加组件.服务和接口来扩展平台的核心功能.附加组件被定义为与环境的其他部分无缝集成的组件,提供类 ...

  5. [转帖]Windows系统内置测试工具(winsat)

    WinSAT 是 Windows 系统评估工具(Windows System Assessment Tool)的缩写,是从 Windows Vista 开始便内置于系统之中的命令行工具,可对 Wind ...

  6. [转帖] 使用uniq命令求并集交集差集

      原创:打码日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. uniq# uniq是linux上非常有用的一个命令,从字面意思上就能看出来,它可以用来去重. 但使用uniq的前提 ...

  7. Nginx 系列 | (转)Nginx 上传文件:client_max_body_size 、client_body_buffer_size

    原文:http://php-note.com/article/detail/488 client_max_body_size client_max_body_size 默认 1M,表示 客户端请求服务 ...

  8. 【转贴】java 进程运行状态图解

    java 进程运行状态图解   原文博客地址 https://www.cnblogs.com/GooPolaris/p/8079490.html java中进程的状态有 6 种: NEW(新建).RU ...

  9. /dev/null 先后顺序的问题

    https://blog.csdn.net/x1131230123/article/details/114317752

  10. 查看 Oracle 数据库内 没有Primary key 类型主键的表信息

    查看 Oracle 数据库内 没有Primary key 类型主键的表信息 SELECT * FROM user_tables A WHERE NOT EXISTS ( SELECT * FROM u ...