У меня есть обратный вызов AJAX, который извлекает значение CLOB из таблицы.

DECLARE
    L_CLOB CLOB;
BEGIN
    SELECT LOG 
    INTO L_CLOB 
    FROM TAB1
    WHERE COL1 = apex_application.g_x01;

    htp.p(L_CLOB);
END;

Однако, когда CLOB слишком велик, он возвращает

ORA-06502: PL/SQL: numeric or value error

Почему это происходит?

2
casey 11 Сен 2018 в 21:20

1 ответ

Лучший ответ

Если вы используете пакет APEX_JSON , вы можете вернуть CLOBS. Пакет htp.p не поддерживает вывод CLOB, если вы хотите его использовать, вам нужно разделить CLOB на более мелкие фрагменты VARCHAR2.

Использование пакета APEX_JSON намного удобнее, вы можете просто передать CLOB в качестве параметра в процедуру записи:

apex_json.open_object;  
apex_json.write('mydata', MY_CLOB);  
apex_json.close_object;  

Если вы поместите это в процедуру обратного вызова AJAX на странице, а затем используете этот Javascript для ее вызова:

 apex.server.process(
    'MY_AJAX_PROCEDURE',   // Process or AJAX Callback name
    {}, //No Parameters
    {
      success: function (pData) {        
        console.log(pData); //The Data will be logged into the console
      }
    }
  );

Вы увидите свои данные CLOB в консоли. Вы также можете делать с ним все остальное.

1
Dominik 12 Сен 2018 в 09:15