我有一个Oracle表,它有一个BLOB列。我需要生成一个与Postgres兼容的insert脚本。
我在Java中尝试了下面的逻辑,但它不起作用:

String value = null;
switch ( dataType ) {
     case Types.BLOB:
        Blob blob = rs.getBlob(colName);
        if ( ( blob != null ) && ( !rs.wasNull() ) ) {
        int blobLength = (int) blob.length();
        byte[] blobAsBytes = blob.getBytes(1, blobLength);
        value = blobAsBytes.toString();
        break;
    }
return value;

最佳答案

您需要将byte[]数组转换为bytea列的the supported formats之一,例如E'\\xDEADBEEF'::bytea
类似于:

StringBuilder result = new StringBuilder(blobAsBytes.length * 2 + 12);
result.append("E'\\\\x");
for (int i = 0; i < blobAsBytes.length; i++)
{
  int c = (blobAsBytes[i] < 0 ? 256 + blobAsBytes[i] : blobAsBytes[i]);
  String hexString = Integer.toHexString(value);
  if (c < 16) result.append('0');
  result.append(hexString);
}
result.append("'::bytea');
value = result.toString();

我不完全确定是否需要::bytea演员,但不会造成伤害。

关于postgresql - 如何从具有blob值的oracle表中为postgresql生成插入脚本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40016094/

10-13 02:17