Сряда, Януари 18, 2012

PL/SQL Developer дебилия...


Днес стана репликационен конфликт в базата и аз тръгвам да го оправям. Всичко добре конфликти оправям и със затворени очи обаче днес се закучи. Оказа се, че колонката е VARCHAR2, а ние я използваме да запишем някакъв двоичен джънк. Та селектвам си аз старата стойност ъпдейтвам я и мисля че съм готов. Обаче оракъла ръмжи...

Оказва се че PL/SQL Developer не визуализира добре стрингове, в които се тъпчат двоични данни. И съответно взимайки велюто аз копирам омазаната стойност ъпдейтвам я и нищо. Взех да мисля как да взема коректна стойност и стигнах до следното.

Ето грешната стойност:

SELECT UTL_RAW.CAST_TO_RAW(SZFIELD) FROM TABLE AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '10' MINUTE) WHERE SZUID = '1234567890';

8D977E7ECA249640D73C24DF370ABFFD

В същото време селектвайки от другата машина получавам:

SELECT UTL_RAW.CAST_TO_RAW(SZFIELD) FROM TABLE WHERE SZUID = ' 1234567890 ';

8D977E7ECA249640D73C24DF370DBFFD

В крайна сметка за да го ъпдейтна правилно направих следното:

UPDATE TABLE SET FIELD = UTL_RAW.CAST_TO_VARCHAR2('8D977E7ECA249640D73C24DF370DBFFD') WHERE SZUID = ' 1234567890 '

Реших проблема но се борих сума си време. То и ние сме за бой че пазим двоично в такива полета ама... :D

Няма коментари