栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何在Oracle SQL Developer中编辑BLOB(包含JSON)?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在Oracle SQL Developer中编辑BLOB(包含JSON)?

如果您在SQL Developer 3.1(可能还有较早的版本)中运行查询以返回BLOB,则可以双击您感兴趣的特定BLOB,在该提示下,系统将提示您尝试将数据发送到外部编辑器或尝试使内置的SQL Developer显示控件尝试将数据解释为图像或文本。如果您选择text选项,则您的JSON数据可能会正确显示。

但是,如果要更改数据,则必须发出一个

UPDATE
来实际设置数据。SQL Developer没有直接编辑LOB数据的功能。例如

UPDATE table_name   SET column_with_json_data =utl_i18n.string_to_raw( '{"foo": {"id": "1", "value": "2"}}' ) WHERe primary_key = <<some value>>

将使用使用数据库字符集编码的新JSON数据更新指定的行。如果要将数据存储在其他字符集中,请string_to_raw使用可选的第二个参数来指定字符集。因此,如果您想使用UTF-8字符集存储数据,则可以执行以下操作

UPDATE table_name   SET column_with_json_data =utl_i18n.string_to_raw( '{"foo": {"id": "1", "value": "2"}}', 'AL32UTF8' ) WHERe primary_key = <<some value>>

当然,由于JSON数据是文本数据,所以最好将数据存储在旨在存储字符大对象的CLOB中。然后,SQL Developer(和其他工具)可以只显示文本,而不需要您选择结果,然后采取其他措施将其转换为文本。而且,您不必将数据转换RAW为即可更新数据库中的数据。

如果数据太长而

string_to_raw
无法处理(取决于字符集和数据,但是在RAW数据超过2000字节时会发生),则可以将数据存储在中CLOB,然后将其转换为BLOB用于更新a的数据桌子。有点复杂,但更灵活。在此示例中,我将JSON数据填充为3200个字符,并带有’*’-显然测试数据不再是有效的JSON,但这对于此问题而言并不重要。

declare  l_blob        blob;  l_clob        clob := rpad('{"foo": {"id": "1", "value": "2", "name": "bob"}}',3200,'*');  l_amt         integer := dbms_lob.lobmaxsize;  l_dest_offset integer := 1;  l_src_offset  integer := 1;  l_csid        integer := dbms_lob.default_csid;  l_ctx         integer := dbms_lob.default_lang_ctx;  l_warn        integer;begin  dbms_lob.createTemporary( l_blob, false );  dbms_lob.convertToBlob( l_blob,    l_clob,    l_amt,    l_dest_offset,    l_src_offset,    l_csid,    l_ctx,    l_warn );  -- You'll want to add a WHERe clause as well  update json_data     set data = l_blob;  dbms_lob.freeTemporary( l_blob );end;/


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号