20

SQL Developer を使用して Oracle 11g データベースにトリガーを作成しようとすると、奇妙なエラーが発生します。これが私がしたことです:

私のテーブル:

CREATE TABLE COUNTRY_CODE(
   ID NUMBER(19,0)      PRIMARY KEY NOT NULL, 
   Code             VARCHAR2(2) NOT NULL,
   Description  VARCHAR2(50),
   created                  TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
   created_by                   VARCHAR2(40) DEFAULT USER, 
   last_updated                 TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
   last_updated_by          VARCHAR2(40) DEFAULT USER,
   archived CHAR(1) DEFAULT '0' NOT NULL );

シーケンス:

CREATE SEQUENCE COUNTRY_CODE_ID_SEQ START WITH 1 INCREMENT BY 1;

引き金:

CREATE OR REPLACE TRIGGER COUNTRY_CODE_TRIGGER
BEFORE INSERT ON COUNTRY_CODE
FOR EACH ROW
DECLARE
    max_id number;
    cur_seq number;
BEGIN
    IF :new.id IS NULL THEN
    SELECT COUNTRY_CODE_ID_SEQ.nextval
    INTO :new.id
    FROM dual;
ELSE
    SELECT GREATEST(NVL(MAX(id),0), :new.id)
    INTO max_id
    FROM COUNTRY_CODE;

    SELECT COUNTRY_CODE_ID_SEQ.nextval
    INTO cur_seq
    FROM dual;

    WHILE cur_seq < max_id
    LOOP
        SELECT COUNTRY_CODE_ID_SEQ.nextval
        INTO cur_seq
        FROM dual;
    END LOOP;
END IF;
END;

テーブルとシーケンスの作成は非常にうまく機能しますが、トリガーを作成しようとすると、次のエラーが発生します。

Error report:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [kqlidchg0], [], [], [], [], [], [], [], [], [], [], []
ORA-00604: error occurred at recursive SQL level 1
ORA-00001: unique constraint (SYS.I_PLSCOPE_SIG_IDENTIFIER$) violated
00603. 00000 -  "ORACLE server session terminated by fatal error"
*Cause:    An ORACLE server session is in an unrecoverable state.
*Action:   Login to ORACLE again so a new server session will be created

誰もこのエラーについて知っていますか?

ありがとう

4

3 に答える 3

52

私はついに私の問題に対する答えを見つけました:

これを追加:

ALTER SESSION SET PLSCOPE_SETTINGS = 'IDENTIFIERS:NONE';

またはOracle SQL Developerで:

  1. [ツール] | [ツール] に移動します。環境設定
  2. データベースを選択 | PL/SQLコンパイラ
  3. PLScope識別子をすべてからなしに変更します
  4. [OK] をクリックします。

これで問題は解決します...

于 2013-06-06T14:23:47.043 に答える
3

私には他に解決策がありません (コメントするだけの評判もありません) が、PL/Scope を使用しながらこの問題を解決するための正しい軌道に乗るのに役立つ情報をいくつか紹介します。

同様の問題が発生したばかりで、PL/Scope 機能を調べると、問題が発生する可能性のある場所を理解するのに役立ちました。私の問題について、トリガーを作成しようとしたところ、まったく同じエラーが発生しました。トリガーの本体を無駄に変更しましたが、名前を変更するとうまくいきました。

PL/Scope は、最初にインスタンス化されたトリガーに関する情報をドロップする前に保持していたようです。トリガーに関するクエリは、トリガーが確実にドロップされていることを明らかにしましたが、(PL/Scope) 識別子 ("all_identifiers") に関するクエリは、まだそこにあることを示しました。

PL/Scope に関する情報はこちら: http://www.oracle.com/technetwork/testcontent/o67asktom-101004.html

ここの第8章(11gドキュメント)に詳細があります: http://docs.oracle.com/cd/B28359_01/appdev.111/b28424.pdf

于 2015-11-24T20:15:34.830 に答える
3

ここに解決策があるかもしれません

于 2013-06-06T13:49:04.537 に答える