问题描述
示例JSON:
我试图利用pljson:
我能够提取,我不知道也许位置或地址值从这个JSON,但当我想提取元素term-id或bank-id我得到错误PL/SQL ORA-30625: 方法调度空自参数是不允许的。也许是因为 “-” 之间的标志?
谢谢。
[ { "term-id": "BA000000", "bank-id": "111", "location": "Poslovalnica banke", "address": "Cankarjeva ulica 2", "city": "Ljubljana", "post-code": "1000", "printer": "true", "deposit": "false", "accessible": "true", "cards": "DECPVR", "special-payments": "false", "BNA": "false", "transaction-receipt": "true", "latitude": 46.051671, "longitude": 14.505122 } ]复制
我试图利用pljson:
declare w_req t_http_request := t_http_request(); w_res t_http_response; w_vrni clob; w_json pljson; w_jsonValue pljson_value; w_jsonList pljson_list; w_test varchar2(100); begin w_req.url := 'https://api.bankart.si/psd2/hub/v1/' || 'ATMList'; w_req.add_header('x-ibm-client-id', 'client-id'); w_res := https_client.doGet (w_req, 'DB'); w_vrni := hibis_util.convertBlobToClob(w_res.content_blob,'AL32UTF8'); w_jsonList := pljson_list(w_vrni); if w_jsonList is not null and w_jsonList.count > 0 then for i in 1..w_jsonList.count loop w_json := pljson(w_jsonList.get(i)); w_jsonValue := w_json.get('term-id'); w_test := w_jsonValue.get_string; dopl(w_test); end loop; end if; end;复制
我能够提取,我不知道也许位置或地址值从这个JSON,但当我想提取元素term-id或bank-id我得到错误PL/SQL ORA-30625: 方法调度空自参数是不允许的。也许是因为 “-” 之间的标志?
谢谢。
专家解答
我不熟悉PL/JSON,但我怀疑问题出在这里:
for i in 1..w_jsonList.count loop
JSON数组是零索引的,因此第一项位于位置零。这从位置1开始搜索。您需要更改循环的开始和结束值:
for i in 0..w_jsonList.count - 1 loop
以下是使用12.2中添加的PL/SQL对象类型的示例:
for i in 1..w_jsonList.count loop
JSON数组是零索引的,因此第一项位于位置零。这从位置1开始搜索。您需要更改循环的开始和结束值:
for i in 0..w_jsonList.count - 1 loop
以下是使用12.2中添加的PL/SQL对象类型的示例:
declare doc json_array_t; item json_element_t; begin doc := json_array_t.parse ( '[ { "term-id": "BA000000", "bank-id": "111", "location": "Poslovalnica banke", "address": "Cankarjeva ulica 2", "city": "Ljubljana", "post-code": "1000", "printer": "true", "deposit": "false", "accessible": "true", "cards": "DECPVR", "special-payments": "false", "BNA": "false", "transaction-receipt": "true", "latitude": 46.051671, "longitude": 14.505122 } ]' ); for i in 1 .. doc.get_size loop item := doc.get ( i ); dbms_output.put_line ( treat ( item as json_object_t ).get ( 'term-id' ).to_String ); end loop; end; / ORA-30625: method dispatch on NULL SELF argument is disallowed declare doc json_array_t; item json_element_t; begin doc := json_array_t.parse ( '[ { "term-id": "BA000000", "bank-id": "111", "location": "Poslovalnica banke", "address": "Cankarjeva ulica 2", "city": "Ljubljana", "post-code": "1000", "printer": "true", "deposit": "false", "accessible": "true", "cards": "DECPVR", "special-payments": "false", "BNA": "false", "transaction-receipt": "true", "latitude": 46.051671, "longitude": 14.505122 } ]' ); for i in 0 .. doc.get_size - 1 loop item := doc.get ( i ); dbms_output.put_line ( treat ( item as json_object_t ).get ( 'term-id' ).to_String ); end loop; end; / "BA000000"复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1156次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
705次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
620次阅读
2025-03-06 09:41:49
【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
DarkAthena
517次阅读
2025-03-04 14:33:31
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
492次阅读
2025-03-05 00:42:34
Ogg23ai高手必看-MySQL Innodb Cluster跟oracle的亲密接触
曹海峰
427次阅读
2025-03-04 21:56:13
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
412次阅读
2025-03-13 14:38:19
【ORACLE】char类型和sql优化器发生的“错误”反应
DarkAthena
391次阅读
2025-03-04 23:05:01
什么,oracle 主机用户被删了?原来是虚惊一场!
Lucifer三思而后行
375次阅读
2025-03-03 21:12:09
Oracle RAC 数据文件添加成本存储的解决办法
ByteHouse
321次阅读
2025-02-26 16:40:50