加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

触发器 – 在Oracle 11g中创建触发器的问题

发布时间:2020-12-12 13:49:12 所属栏目:百科 来源:网络整理
导读:尝试使用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 TIMESTA
尝试使用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

有没有人知道这个错误?

谢谢

我终于找到了我的问题的答案:

加这个:

ALTER SESSION SET PLSCOPE_SETTINGS = 'IDENTIFIERS:NONE';

或者在Oracle SQL Developer中:

>转到工具|优先
>选择数据库| PL / SQL编译器
>将“全部”中的PLScope标识符更改为“无”
>点击确定

这修复了问题…

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读