Лучший способ заполнить varray в разных блоках кода pl sql

java.net.SocketException вызывается при возникновении ошибки при создании или доступе к сокету (например, TCP ). Обычно это может быть вызвано, когда сервер завершил соединение (без его правильного закрытия), поэтому до получения полного ответа. В большинстве случаев это может быть вызвано проблемой таймаута (например, ответ занимает слишком много времени или сервер перегружен запросами), или клиент отправил SYN, но он не получил ACK (подтверждение завершения соединения) , Для проблем с таймаутом вы можете увеличить значение таймаута.

Исключение Socket обычно содержит подробное сообщение о проблеме.

Пример подробных сообщений:

  • Программное обеспечение вызвало прерывание соединения: recv не удалось. Ошибка указывает на попытку отправить сообщение, и соединение было прервано вашим сервером. Если это произошло при подключении к базе данных, это может быть связано с использованием несовместимого драйвера Connector / J JDBC . Возможное решение. Убедитесь, что в вашем CLASSPATH есть соответствующие библиотеки / драйверы.
  • Программное обеспечение вызвало прерывание соединения: connect. Это может произойти, если есть проблема с подключением к пульту дистанционного управления. Например, из-за проверки на вирусы, отклоняющей удаленные почтовые запросы . Возможное решение: проверьте службу проверки вирусов, блокирует ли он порт для исходящих запросов на соединения.
  • Программное обеспечение вызвало прерывание соединения: ошибка записи сокета. Возможное решение: убедитесь, что вы пишете правильную длину байтов в потоке. Поэтому дважды проверьте, что вы отправляете. См. Этот поток .
  • Сброс соединения с помощью одноранговой сети: ошибка записи сокета / Соединение прерывается ошибкой записи пира: сокет Приложение не проверяет, было ли время ожидания подключения включено на стороне сервера. Возможное решение: убедитесь, что HttpClient не имеет значения null перед чтением из соединения. E13222_01
  • Соединение сброшено одноранговым узлом. Соединение было завершено сервером (сервером).
  • Сброс соединения. Соединение было либо прекращено клиентом, либо закрыто сервером в конце соединения из-за запроса с запросом. См.: Что вызывает мой java.net.SocketException: Сброс соединения?

0
задан APC 19 March 2019 в 09:03
поделиться

2 ответа

вы можете использовать extend

declare
  TYPE name_options IS VARRAY(6) OF VARCHAR2(300);
  dd_name_options_c name_options;

begin
  dd_name_options_c := name_options('a', 'b', 'c', 'd');

  dd_name_options_c.Extend(2);
  dd_name_options_c(5) := 'e';
  dd_name_options_c(6) := 'f';

  dbms_output.put_line(dd_name_options_c.count());
end;
/
0
ответ дан hotfix 19 March 2019 в 09:03
поделиться

, что если у меня есть два блока, которые генерируют строки, и я хочу сохранить все строки в одном массиве

Если блоки являются отдельными программными модулями или иным образом отключены, возможно, даже может Для выполнения в разных порядках вам нужна логика, которая может определить, заполнен ли целевой массив. Одним из решений является использование (частной) процедуры PL / SQL для управления этим.

procedure populate_varray 
     ( p_tgt in out name_options
       , p_new in name_options)
is
   n pls_integer;
begin
   if p_tgt is null 
         or p_tgt.count() = 0 
   then
     p_tgt := p_new;
   elsif  p_new is not null 
         and p_new.count() > 0
   then 
     n := p_tgt.count();
     for idx in 1 .. p_new.count() loop
       p_tgt.extend();
       p_tgt(n + idx) := p_new(idx);
     end loop;
   end if;
end populate_varray;

Примечание: непроверенный код, пожалуйста, прокомментируйте ниже, если есть ошибки:)

Вы бы назвали это так:

-- Block 1
....
populate_varray ( dd_name_options_c 
                  , name_options(string1, string2, string3, string4));
....
-- Block 2
....
populate_varray (dd_name_options_c  
                  , name_options(string5, string6) );
0
ответ дан APC 19 March 2019 в 09:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: