我有一个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/