ВАША ТАБЛИЦА ДОЛЖНА СОДЕРЖАТЬ СЛЕДУЮЩУЮ КОЛОННУ ДЛЯ РАБОТЫ:

. . .. . .. . . .. . …………………… нулевой

IMAGE BLOB ………………… …Да — -
FILENAME VARCHAR2(1000). Да — -
MIMETYPE VARCHAR2(1000) Да — -
IMAGE_LAST_UPDATE DATE. ДА - -

1- перейдите в «Общие компоненты», затем в «Элементы приложения» добавьте элемент приложения EMP_ID в моем случае.

2- внутри элемента приложения добавить в защиту статистики сеанса Неограниченно

3- перейдите в браузер obj и создайте процедуру:

create or replace PROCEDURE DISPLAY_IMAGE(lgs_per_v IN NUMBER) AS
   CURSOR Sel_Prs IS
      SELECT IMAGE, DBMS_LOB.GETLENGTH(IMAGE) AS length_img, MIMETYPE, FILENAME
      FROM lgs_person
      WHERE code = lgs_per_v;
   Prs_R Sel_Prs%ROWTYPE;
   L_LENGTH    NUMBER;
   L_FILE_NAME VARCHAR2(2000);
   LOB_LOC     BLOB;
   L_MIME      VARCHAR2(255);
BEGIN
   OPEN Sel_Prs;
   FETCH Sel_Prs INTO Prs_R;
   CLOSE Sel_Prs;
   sys.HTP.init;
  sys.OWA_UTIL.mime_header(Prs_R.mimetype, FALSE);
  sys.HTP.p('Content-Length: ' || DBMS_LOB.getlength(Prs_R.image));
  sys.HTP.p('Content-Disposition: filename="' || Prs_R.filename || '"');
  sys.OWA_UTIL.http_header_close;
  sys.WPG_DOCLOAD.download_file(Prs_R.image);
  apex_application.stop_apex_engine;
EXCEPTION
  WHEN apex_application.e_stop_apex_engine THEN
    NULL;
end;

Предоставленный код представляет собой процедуру PL/SQL, которая отображает изображение, хранящееся в столбце BLOB (большой двоичный объект) таблицы. Давайте разберем код и объясним каждый раздел:

  1. Оператор CREATE OR REPLACE PROCEDURE используется для определения или замены хранимой процедуры в базе данных.
  2. Процедура называется DISPLAY_IMAGE и ожидает один входной параметр lgs_per_v типа NUMBER.
  3. Объявлен курсор с именем Sel_Prs. Он выполняет запрос SELECT к таблице lgs_person, извлекая столбцы IMAGE, MIMETYPE и FILENAME, где столбец code соответствует входному параметру lgs_per_v.
  4. Переменная Prs_R объявлена ​​как тип записи, соответствующий структуре строк курсора Sel_Prs.
  5. Объявляются дополнительные переменные: L_LENGTH типа NUMBER, L_FILE_NAME типа VARCHAR2(2000), LOB_LOC типа BLOB и L_MIME типа VARCHAR2(255).
  6. Оператор OPEN используется для открытия курсора Sel_Prs.
  7. Оператор FETCH извлекает следующую строку из курсора и сохраняет ее в переменной записи Prs_R.
  8. Оператор CLOSE используется для закрытия курсора Sel_Prs.
  9. Процедура sys.HTP.init инициализирует буфер HTTP для генерации ответа HTTP.
  10. sys.OWA_UTIL.mime_header вызывается для установки MIME-типа ответа на основе значения Prs_R.mimetype. Второй параметр имеет значение FALSE, чтобы указать, что ответ не должен кодироваться автоматически.
  11. sys.HTP.p используется для записи текста в ответ HTTP. Заголовок Content-Length устанавливается с помощью функции DBMS_LOB.getlength(Prs_R.image) для определения длины данных изображения. Заголовок Content-Disposition указывает имя файла изображения с использованием Prs_R.filename.
  12. sys.OWA_UTIL.http_header_close вызывается для закрытия заголовков ответа HTTP.
  13. sys.WPG_DOCLOAD.download_file используется для загрузки данных BLOB из столбца Prs_R.image и отправки их в качестве тела ответа.
  14. apex_application.stop_apex_engine вызывается для остановки механизма APEX, который завершает обработку текущего приложения APEX.
  15. Раздел EXCEPTION обрабатывает исключения, которые могут возникнуть во время выполнения процедуры. В этом случае исключение WHEN apex_application.e_stop_apex_engine перехватывается и игнорируется.

В целом, этот код извлекает изображение из базы данных на основе заданного кода, устанавливает соответствующие заголовки HTTP для ответа и отправляет данные изображения в качестве тела ответа HTTP.

4- После создания процедуры перейдите в «Общие компоненты», затем откройте «Процессы приложений» и добавьте процесс:

5- Установите точку процесса (требуемое значение):

Обратный вызов Ajax: запускайте этот процесс приложения по запросу процесса страницы.

6- добавьте следующий код:

:BEGIN
DISPLAY_IMAGE(:EMP_ID);
END;

Вот почему мы создали emp_id для хранения отображаемых данных.

Я использую плагин под названием FOS, который ВЫ МОЖЕТЕ найти в apex world.

этот плагин позволит мне отображать HTML, ИСПОЛЬЗУЯ HTP.P

7- в наборе атрибутов:

Метод вывода: прямой вывод через htp.p

и добавьте следующий код:

DECLARE

Cursor Sel_Prs is
    select ACTIVE_FLG,DIRECT_TELEPHONE,EMAIL,POSITION_DESC,E_NAME,IMAGE
    from lgs_person
    where code = :P47_EMP;

Prs_R Sel_Prs%rowtype;

BEGIN
    OPEN Sel_prs;
    FETCH Sel_Prs INTO Prs_R;
    CLOSESel_Prs;




       HTP.p('<div class="card">');
       HTP.p('<div class="team-image-wrapper">');

If Prs_R.IMAGE is null then
       /*DEFAULT IMAGE*/  
       HTP.p('<img class="team-member-image" src=#APP_FILES#user%20default.jpeg>');
ELSE   /* OUR CODE THAT WILL DISPLAY THE IMAGE */
       htp.p('<img src="f?p=&APP_ID.:1:&APP_SESSION.:APPLICATION_PROCESS=DISPLAY_IMAGE:::EMP_ID:'||:P47_EMP||'">'); 
END IF;

END;

Вот разбивка строки URL:

  • f?p=: Обычно это синтаксис, используемый в Oracle Application Express (APEX) для указания запроса страницы.
  • &APP_ID.: это заполнитель, который следует заменить фактическим идентификатором приложения APEX. Приложения APEX идентифицируются уникальным идентификационным номером.
  • :1:: Эта часть представляет собой номер страницы в приложении APEX, к которой необходимо получить доступ.
  • &APP_SESSION.: это еще один заполнитель, который следует заменить активным идентификатором сеанса APEX. APEX поддерживает информацию о сеансе для каждого пользователя.
  • APPLICATION_PROCESS=DISPLAY_IMAGE: указывает имя процесса приложения в APEX, который должен быть выполнен. В данном случае это относится к процедуре PL/SQL с именем DISPLAY_IMAGE.
  • :::EMP_ID:'||:P47_EMP||': эта часть содержит заполнитель :P47_EMP, который следует заменить значением элемента страницы с именем P47_EMP. EMP_ID — это параметр, передаваемый процедуре DISPLAY_IMAGE.

Когда этот фрагмент HTML отображается на веб-странице, браузер интерпретирует тег <img> и делает запрос к указанному URL-адресу, заменяя заполнители соответствующими значениями. Затем приложение APEX выполнит процедуру DISPLAY_IMAGE, извлечет данные изображения на основе предоставленного EMP_ID и отправит их обратно в качестве ответа. Браузер отобразит изображение на веб-странице.

Таким образом, этот код используется для динамического создания тега <img> с URL-адресом, который инициирует выполнение процедуры DISPLAY_IMAGE в приложении Oracle APEX, позволяя отображать изображение, соответствующее определенному параметру EMP_ID.

Спасибо за чтение! Надеюсь, объяснение было для вас полезным. Если у вас есть еще вопросы или вам нужна дополнительная помощь, не стесняйтесь спрашивать. Не забудьте подписаться на дополнительные советы и информацию. Берегите себя и хорошего дня! :)