Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 批量更新Oracle BLOB值_Sql_Oracle_Sql Update_Blob - Fatal编程技术网

Sql 批量更新Oracle BLOB值

Sql 批量更新Oracle BLOB值,sql,oracle,sql-update,blob,Sql,Oracle,Sql Update,Blob,我正在尝试使用以下代码更新一系列BLOB值。请注意,我们不是使用Blob对象,而是调用setBytes try (PreparedStatement p = c.prepareStatement("UPDATE table SET data = ? WHERE id = ?") { for (Map.Entry<String, byte[]> d : updates.entrySet()) { p.setBytes(1, d.getValue());

我正在尝试使用以下代码更新一系列BLOB值。请注意,我们不是使用
Blob
对象,而是调用
setBytes

try (PreparedStatement p = c.prepareStatement("UPDATE table SET data = ? WHERE id = ?") {
    for (Map.Entry<String, byte[]> d : updates.entrySet()) {
        p.setBytes(1, d.getValue());
        p.setString(2, d.getKey());
        p.addBatch();
    }

    p.executeBatch();
}
try(PreparedStatement p=c.prepareStatement(“更新表集数据=?其中id=?”){
对于(Map.Entry d:updates.entrySet()){
p、 setBytes(1,d.getValue());
p、 setString(2,d.getKey());
p、 addBatch();
}
p、 executeBatch();
}
但是,运行速度非常慢(每秒更新大约100行)

  • 这是执行这些更新的“正确”方法吗?我们应该使用
    Blob
    对象吗?我们如何执行这些更新和新数据插入
  • 是否有任何原因导致运行缓慢

BLOB与常规行数据分开存储。因此,它们始终位于不同的磁盘页中。如果您有旋转硬盘驱动器(与SSD相反)而且没有RAID或巨大的缓存,每秒100行可能是最好的,与客户端无关。即使是行内存储?我从来没有听说过Blob的行内存储。Oracle行仅限于单个磁盘页,通常为8K。因此,如果您的二进制数据非常小,您可以对其进行Base64编码并存储在VARCHAR列中。这是一个fea是的,这在oracle中已经有一段时间了-谢谢。我不知道。我的评论不适用于行内存储。您是否为BLOB列使用行内存储?