У меня есть доступ только для чтения к базе данных, содержащей две схемы с такими таблицами:
schema1.A.unique_id, schema1.A.content
schema2.B.unique_id, schema2.B.content
A.unique_id
и B.unique_id
будут совпадать, а A.content
и B.content
— это столбцы *LOB
, которые должны совпадать (это была не моя идея, лол). Что я хотел бы сделать, так это сравнить содержимое полей content
и посмотреть, сколько из них равны. Однако один CLOB
, а другой BLOB
.
DBMS_LOB.COMPARE()
— очевидный помощник, однако он сравнивает только два *LOB
одного типа (например, CLOB
против CLOB
).
Вместо написания скрипта для получения содержимого полей и сравнения их в памяти, как я могу выполнить это сравнение в прямом PL/SQL? Есть ли способ преобразовать одно из полей на лету, чтобы типы совпадали (опять же, имейте в виду, что у меня есть доступ только для чтения)?
Спасибо!
CLOB
вBLOB
— двоичное представление может использовать другой набор символов, поэтому методconvertToCLOB
принимает параметр набора символов. Вы можете вызватьdbms_lob.convertToCLOB
для столбцов BLOB (илиconvertToBLOB
для столбцов CLOB), а затем сравнить, но это не будет очень эффективно. - person Justin Cave   schedule 26.09.2016convertToCLOB()
, если у меня нет прав на запись? Или вы думаете, что сравнение в памяти на локальной машине со скриптом будет быстрее, чем делатьconvertToCLOB()
+compare()
? - person dmn   schedule 26.09.2016dbms_lob.convertToCLOB
ничего не пишет. Предполагая, что вы можете написать анонимный блок PL/SQL, вы можете использовать локальные переменныеclob
(илиblob
). - person Justin Cave   schedule 26.09.2016BLOB
. Может, мне просто написать сценарий, лол. Спасибо за помощь :D - person dmn   schedule 26.09.2016