суббота, 15 февраля 2020 г.

Исполняемый блок с перебором значений, указанных через запятую

declare
    dbnames varchar(32767) := 'DBNAME1, DBNAME2, DBNAME3';
    dbcnt integer;
    dbnames_length integer;
    separ_position integer := 0;
    dbname varchar(32767);
begin
/* Сразу убираем лишние символы (в этом примере - пробелы) */
    dbnames := replace(dbnames,' ','');
    dbnames_length := length(dbnames);
    dbcnt := regexp_count(dbnames, ',') + 1;
    for i in 1..dbcnt loop
        separ_position := instr(dbnames,',');
        dbname := substr(dbnames, 1, separ_position - 1);
/* Если итерация последняя, то берем остаток строки без вычислений */
        if i = dbcnt then dbname := dbnames; end if;
        dbms_output.put_line(dbname);
/* Отсекаем от начала исходной переменной "отработанную" часть */        
        dbnames := substr(dbnames, separ_position + 1,dbnames_length);
    end loop;    
end;

Комментариев нет:

Архив