Вставка в таблицу Oracle из переменной оболочки, хранящей тысячи значений

Нет, это ненормально.

Linux имеет функцию "виртуальной консоли" :нажав CtrlAltфункциональную клавишу вы можете переключаться между несколькими представлениями консоли. Как правило, когда система работает нормально, F1 или F6 имеют графический интерфейс по умолчанию, если он включен, а из оставшихся первых 4 или 5 обычно содержат приглашения для входа в систему для сеансов на основе текста -, а остальные не используются.

В программах установки ОС Linux принято использовать эти виртуальные консоли для предоставления журнала событий установщика и/или приглашения оболочки для расширенного устранения неполадок, если это необходимо. Итак, удерживайте нажатыми Ctrl и Alt и начинайте нажимать функциональные клавиши одну за другой :обычно F1 — это вид, в котором вы сейчас находитесь, а последующие виды могут содержать настройки установщика. log и/или корневую подсказку, которую вы можете использовать, чтобы узнать больше информации о том, что вызывает задержку. Обратите внимание, что включение и выключение графического режима может занять несколько секунд, так что не спешите.

1
28.06.2020, 18:54
1 ответ

Одним из вариантов может быть создание списка из insertоператоров и запуск sqlplusодин раз со всем списком,что-то вроде:

function call_HEAD_INSERT
{
    local files=/home/oracle/LOG_*.DAT
    local insertStatement=""

    # Loop over all files and build a single insertStatement containing the
    # the necessary content from each file
    for f in ${files}; do
        local ptrn="$(grep HEAD "${f}")"
        insertStatement="${insertStatement}
insert into user.customer(HEAD) values ('$ptrn');"
    done

        # Run sqlplus once with all the inserts
        cat <<- EOF | sqlplus -s "${ORACLE_LOGIN}" >> "${logFile}"
set feedback off;
set heading off;
set serveroutput on size unlimited;

VARIABLE GV_return_code    NUMBER;
VARIABLE GV_script_error   CHAR(255);

EXEC :GV_return_code := 0;

WHENEVER SQLERROR EXIT 1

DECLARE
    L_error_message VARCHAR2(255);
BEGIN
    ${insertStatement}
    commit;
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        :GV_return_code := 1;
        :GV_script_error := SQLERRM;
END;
/

print :GV_script_error;
exit :GV_return_code;
EOF
}

Я не знаком с Oracle SQL, но, возможно, есть способ вставить несколько строк с помощью одного оператора insert.

0
18.03.2021, 23:24

Теги

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