json 被oracle错误消息混淆:PL/SQL:ORA-25137:数据值超出范围

zed5wv10  于 2023-02-20  发布在  Oracle
关注(0)|答案(1)|浏览(188)

错误(PL/SQL:ORA-25137:数据值超出范围)在Oracle 21c中执行以下代码时报告。

create table t(id int ,j json);
insert into t values(1,'{"key":"valus"}');
DECLARE
  b varchar2(100);
BEGIN
  select cast(j as varchar2(100)) into b from t where id=1;
  DBMS_OUTPUT.PUT_LINE(b);
END;

错误消息为

ERROR at line 4:
ORA-06550: line 4, column 15:
PL/SQL: ORA-25137: Data value out of range
ORA-06550: line 4, column 3:
PL/SQL: SQL Statement ignored

我使用的oracle版本是
Oracle db2 1c企业版发行版21.0.0.0.0-生产版21.3.0.0.0
我不明白为什么报告此错误。我认为我设置的转换目标大小足够,但"ORA-25137:数据值超出范围"。
谁能解释一下为什么?

2uluyalo

2uluyalo1#

数据以二进制格式存储在表中,因此您应该使用JSON_SERIALIZE函数将JSON从任何支持的类型转换为文本。

Select t.id, json_serialize(t.j) From tbl t;

  id  j
----  -------------------
   1  {"key":"valus"}

或者,对于以前的版本,使用一些json函数,如:

Select t.id, json_value(t.j, '$.key') as json_key From tbl t;

  id  json_key
----  -------------------
   1  valus

使用SQL和json数据类型(json_query(),json_table(),...)获取数据时,还有更多函数和选项,您可以找到更多相关信息--https://oracle-base.com/articles/21c/json-data-type-21c

相关问题