编译存储过程报错,提示我,必须先声明get_elem组件
问题描述:自己在学习json的相关知识,其中有一个是利用pl/sql解析json格式的数据,根据教程写了一个比较简单的存储过程,编译的时候报错。
错误位置在最后一部分的for循环取数据的时候。
经过检查,发现json_list中有这个get_elem方法,被注释掉了,如何启用?
具体代码如下:
CREATE OR REPLACE PROCEDURE TEST_POR AS
--准备工作
G_JSON_VACHAR VARCHAR2(4000); --声明存储json数据的的g_json_varchar
G_JSON_ALL JSON; --声明json格式,存储整个json
G_JSON_PART JSON; --存储部分数据 applelist
G_JSON_LIST JSON_LIST; --存放json_list列表
G_MARKETCODE VARCHAR2(8);
G_MARKETNAME VARCHAR2(20);
G_ADDRESS VARCHAR2(40);
G_TEL VARCHAR2(15);
G_NAME VARCHAR2(20);
G_FRUITCODE VARCHAR2(20);
BEGIN
G_JSON_VACHAR := '{
"marketcode": "123456",
"marketname": "好吃的水果店",
"address": "一个好地方",
"tel": "12345678901",
"fruitlist": {
"name": "apple",
"fruitcode": "223344",
"applelist": [
{
"applename": "redapple ",
"applecode": "111000",
"price": "10"
},
{
"applename": "greenapple ",
"applecode": "111111",
"price": "12"
},
{
"applename": "yellowapple ",
"applecode": "111222",
"price": "8"
}
]
}
}';
G_JSON_ALL := JSON(G_JSON_VACHAR);
--获取第一层
G_MARKETCODE := JSON_EXT.GET_STRING(G_JSON_ALL, 'marketcode');
G_MARKETNAME := JSON_EXT.GET_STRING(G_JSON_ALL, 'marketname');
G_ADDRESS := JSON_EXT.GET_STRING(G_JSON_ALL, 'address');
G_TEL := JSON_EXT.GET_STRING(G_JSON_ALL, 'tel');
--获取第二层
G_NAME := JSON_EXT.GET_STRING(G_JSON_ALL, 'fruitlist.name');
G_FRUITCODE := JSON_EXT.GET_STRING(G_JSON_ALL, 'fruitlist.fruitcode');
--获取第三层,利用json_list来存放json列表
G_JSON_LIST := JSON_LIST();
G_JSON_PART := JSON(); --用来存放一部分的数据,applelist中的数据
G_JSON_LIST := JSON_EXT.GET_JSON_LIST(G_JSON_ALL, 'fruitlist.applelist');
--利用循环返回每个json部分的值
FOR I IN 1 .. G_JSON_LIST.COUNT LOOP
--读取每个品种的具体信息
G_JSON_PART := JSON(G_JSON_LIST.GET_ELEM(I));
G_JSON_LIST.
DBMS_OUTPUT.PUT_LINE(JSON_EXT.GET_STRING(G_JSON_PART, 'applename'));
DBMS_OUTPUT.PUT_LINE(JSON_EXT.GET_STRING(G_JSON_PART, 'applecode'));
DBMS_OUTPUT.PUT_LINE(JSON_EXT.GET_STRING(G_JSON_PART, 'price'));
END LOOP;
END;