java.net.SocketException
вызывается при возникновении ошибки при создании или доступе к сокету (например, TCP ). Обычно это может быть вызвано, когда сервер завершил соединение (без его правильного закрытия), поэтому до получения полного ответа. В большинстве случаев это может быть вызвано проблемой таймаута (например, ответ занимает слишком много времени или сервер перегружен запросами), или клиент отправил SYN, но он не получил ACK (подтверждение завершения соединения) , Для проблем с таймаутом вы можете увеличить значение таймаута.
Исключение Socket обычно содержит подробное сообщение о проблеме.
Пример подробных сообщений:
вы можете использовать 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;
/
, что если у меня есть два блока, которые генерируют строки, и я хочу сохранить все строки в одном массиве
blockquote>Если блоки являются отдельными программными модулями или иным образом отключены, возможно, даже может Для выполнения в разных порядках вам нужна логика, которая может определить, заполнен ли целевой массив. Одним из решений является использование (частной) процедуры 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) );