7

私が使用している 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

オラクルとの接続を切断して再接続すると、関数は問題なくコンパイルされます...

エラーコードと引数をグーグルで検索すると、これが得られました

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;
/

この動作の原因は何ですか?

4

1 に答える 1

13

これは自己回答型の質問として計画されたものではありませんでしたが、書いたときにアイデアが浮かびました。Stackoverflow に感謝します。:)

私はSQL Developerで関数を開発およびテストしています。結果セットの行数は、引数に応じて、数から数千までさまざまです。

この問題は、最後の結果セットに 50 を超えるレコードが含まれている場合にのみ発生することに気付きました。

問題は、SQL Developer が最初に oracle から最初の 50 行しかフェッチしないことです。データがまだパイプラインにある状態で関数を再コンパイルすると、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.

ふう、それが今働いていることを嬉しく思います!データベース エンジンからの内部エラーだけで、身震いするほどです。

于 2015-01-30T12:58:07.920 に答える