Компиляция функции PL/SQL в Oracle 11g2 XE иногда приводит к ORA-00600: внутренняя ошибка

У меня есть функция PL/SQL, с которой я работаю, которая иногда компилируется нормально, но иногда выдает мне эту ошибку.

ORA-00600: internal error code, arguments: [17285], [0x318FDE2C], [1], [0x273F1C60], [], [], [], [], [], [], [], []
00600. 00000 -  "internal error code, arguments: [%s], [%s], [%s], [%s], [%s], [%s], [%s], [%s]"
*Cause:    This is the generic internal error number for Oracle program
       exceptions.  This indicates that a process has encountered an
       exceptional condition.
*Action:   Report as a bug - the first argument is the internal error number

Отключение и повторное подключение к Oracle, и функция компилируется нормально, что кажется сумасшедшим...

Погуглив код ошибки и аргумент дал мне это

ERROR:
ORA-600 [17285] [a] [b] [c]

VERSIONS:
versions 7.0 to 10.1
DESCRIPTION:
Oracle is in the process of deleting an instantiation object when it
discovers that the object is currently on the call stack.
This should not occur and so ORA-600 [17285] is reported.
ARGUMENTS:
Arg [a] Instantiation object
Arg [b] Call stack nesting level
Arg [c] Library Cache Object Handle
FUNCTIONALITY:
Kernel Generic Instantiation manager

IMPACT:
PROCESS FAILURE
NON CORRUPTIVE - no corruption to underlying data.
SUGGESTIONS:
This error is usually accompanied by another error. Please check for this.

Моя функция возвращает пользовательский тип таблицы по конвейеру. Большая часть кода функции опущена...

CREATE TYPE t_solexp_row AS OBJECT (
obj         VARCHAR(30),
dt          DATE,
param       VARCHAR(30),
param_id    NUMBER,
val         NUMBER,
change_time TIMESTAMP
);
/

CREATE TYPE t_solexp_tab IS TABLE OF t_solexp_row;
/

CREATE OR REPLACE FUNCTION get_solexp_tab(p_start_date IN DATE, p_end_date IN DATE) RETURN t_solexp_tab PIPELINED AS
BEGIN
    ...
    LOOP
        PIPE ROW(t_solexp_row(...,...,...,...,...,...);
    END LOOP;
    ...
    RETURN;
END;
/

Есть идеи, что может вызвать такое поведение?

1 ответ

Решение

Это не было запланировано как вопрос с самостоятельным ответом, но у меня появилась идея, когда я написал это, спасибо Stackru!:)

Я занимаюсь разработкой и тестированием функции в SQL Developer. Количество строк в наборе результатов варьируется от нескольких до многих тысяч в зависимости от аргументов.

Я заметил, что проблема возникает только тогда, когда последний набор результатов содержит более 50 записей.

Кажется, что проблема заключается в том, что SQL Developer изначально выбирает только первые 50 строк из oracle, перекомпиляция функции с данными, находящимися в конвейере, вызывает ORA-00600. Кажется разумным и соответствует описанию ошибки

Oracle is in the process of deleting an instantiation object when it
discovers that the object is currently on the call stack.
This should not occur and so ORA-600 [17285] is reported.

Фу, просто рад, что это работает сейчас! Внутренних ошибок из базы данных достаточно, чтобы вызвать у меня дрожь.

Другие вопросы по тегам