当前位置: 首页 > 面试题库 >

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

韩靖琪
2023-03-14
问题内容

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

我可以打开并查看它们,但是是否需要外部编辑器来编辑它们?答案非常感谢您对使用内容(即使只是记事本)及其使用方法的任何帮助。

编辑:有问题的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;
/


 类似资料:
  • 我有上传到blob存储的各种文件类型。我需要使用第三方工具(Exiftool,Imagemagick等)编辑/读取这些文件--我知道我可能会使用媒体服务,但我必须使用这些工具)。一旦文件在blob存储中,我的工作者角色是否必须从存储中下载blob才能处理文件?产生这些问题的原因是,我正在处理非常大的文件(视频、图像等),我不一定想使用MemoryStream。 如果我必须将文件从存储区下载到一个临

  • 任何人都可以知道如何做到这一点吗? 我想这是一个编辑文本,但是我怎么能同时放标签和文本呢? 先谢谢你

  • 我在stackoverflow上看到过类似的问题,但无论如何,我无法用这些答案解决我的问题。 我想做的是: 单击JTable中的double on单元格(由于IsCelledTable方法,该单元格可以编辑) 在自定义表中保存单元格的新值以打印此新值 更新我的数据库(SQlite)中的数据 这是我的自定义表模型 . 这是我打印JTable的JPanel:

  • 尝试转换多个时。使用py2exe将文件复制到exe文件中我得到错误:回溯(最近一次调用上次):文件“ParentWindow.py”,第7行,in 提到的“FileAnalysers1”是包含. py脚本的python包。如何在exe中包含整个包?

  • 问题内容: 我正在编写一个网络自动化程序,到目前为止,使用Selenium的FirefoxDriver可以正常工作。但是,如果未安装Firefox,我想使其使用Chrome。我下载了ChromeDriver,将其放在Eclipse项目的文件夹中,然后运行它。在我添加之后,它运行良好。但是,当我尝试导出它时(使用Eclipse的标准Export)。我相信它会崩溃,因为它找不到ChromeDriver

  • 问题内容: 我正在使用pyinstaller创建我的python脚本的可执行文件。 在脚本中,我使用了以下导入: 问题是,运行时,它将导致包括Firefox而不是Chrome。在结果文件夹c:… \ dist \ myscript \ selenium \ webdriver中,有一个firefox文件夹,因此它只是跳过了chromedriver,这对我来说是个严重的问题,因为脚本需要与Chrom