Ошибка отображения изображения Oracle apex 19.1 ORA-00932: несогласованные типы данных: ожидаемый CHAR получил LONG BINARY

Я пытаюсь отобразить изображение в oracle apex 19.1, которое сохраняется как LONG RAW в столбце базы данных.

Я создал новую страницу с новым регионом.

Это SQL-запрос select в регионе как классический отчет.

select ID,
       PHOTO
  from MY_TABLE
  where "ID"= '1'

Я изменил тип столбца PHOTO на Display Image, а в столбце BLOB Attributes -> BLOB он отображается как varchar2 вместо LONG RAW

И когда я запускаю приложение, я вижу следующую ошибку:

report error:
ORA-00932: inconsistent datatypes: expected CHAR got LONG BINARY

person Reactive_learner    schedule 08.05.2020    source источник


Ответы (1)


О боже, пожалуйста, больше не используйте тип данных LONG RAW, используйте вместо него BLOB. Он устарел уже несколько десятилетий назад. . (Я считаю, что единственная причина, по которой он все еще существует, заключается в том, что Oracle использует LONG для хранения представлений и значений по умолчанию.)

РЕДАКТИРОВАТЬ:

Согласно документации, при переносе LONG на LOB на самом деле довольно просто. Вот минимальный пример:

CREATE TABLE t (id NUMBER PRIMARY KEY, x LONG RAW);
INSERT INTO t VALUES (1, RPAD('a', 2000, 'a'));

Таблица может быть перенесена в BLOB:

ALTER TABLE told MODIFY (x BLOB) LOB (x) STORE AS SECUREFILE;
person wolφi    schedule 08.05.2020
comment
Могу ли я изменить тип данных в существующей производственной базе данных? А если нет, то есть ли способ использовать функцию APEX? - person Reactive_learner; 08.05.2020
comment
Я отредактировал свой ответ, чтобы показать, как можно изменить тип данных в существующей базе данных. Отвечает ли это на ваш вопрос? - person wolφi; 08.05.2020