2010-08-09 92 views
1

我有一个脚本来创建表和相关结构SHOW错误终止执行

DROP TABLE CDR.ExtDL_JobStatus; 

-- 
-- TABLE: CDR.ExtDL_JobStatus 
-- 

CREATE TABLE CDR.ExtDL_JobStatus(
    Id    NUMBER(38, 0) NOT NULL, 
    ShortName  NUMBER(38, 0) NOT NULL, 
    Description NUMBER(38, 0) NOT NULL, 
    CONSTRAINT PK_ExtDL_JobStatus PRIMARY KEY (Id) 
) 
; 



SHOW ERRORS; 
Declare NumOfSequences NUMBER :=0; 
Begin 
    Select COUNT(*) 
    INTO NumOfSequences 
    FROM All_Sequences 
    WHERE 1=1 
    And upper (Sequence_Owner) = upper ('CDR') 
    And upper (Sequence_Name) = upper ('ExtDL_JobStatus_Seq'); 
    If NumOfSequences > 0 Then 
    Execute IMMEDIATE 'DROP SEQUENCE CDR.ExtDL_JobStatus_Seq'; 
    End If; 
End; 
/
CREATE SEQUENCE CDR.ExtDL_JobStatus_Seq 
    INCREMENT BY 1 
    START WITH 1 
    NOMAXVALUE 
    NOMINVALUE 
; 
/

SHOW ERRORS; 
Declare NumOfTriggers NUMBER :=0; 
Begin 
    SELECT COUNT(*) 
    INTO NumOfTriggers 
    FROM All_Triggers 
    WHERE 1=1 
    And upper (Owner) = upper ('CDR') 
    And upper (Trigger_Name) = upper ('ExtDL_JobStatus_SeqTrg'); 
    If NumOfTriggers > 0 Then 
    Execute IMMEDIATE 'DROP TRIGGER CDR.ExtDL_JobStatus_SeqTrg'; 
    End If; 
End; 
/
CREATE TRIGGER CDR.ExtDL_JobStatus_SeqTrg 
BEFORE INSERT 
ON CDR.ExtDL_JobStatus 
    FOR EACH ROW 
    WHEN (new.Id IS NULL) 
    BEGIN 
     SELECT ExtDL_JobStatus_Seq.nextval into :new.Id from dual; 
    END; 


/
SHOW ERRORS; 


insert into CDR.ExtDL_JobStatus (SHORTNAME, Description) VALUES (1, 1); 
insert into CDR.ExtDL_JobStatus (SHORTNAME, Description) VALUES (1, 1); 
insert into CDR.ExtDL_JobStatus (SHORTNAME, Description) VALUES (1, 1); 
select * FROM CDR.ExtDL_JobStatus 

当我与SHOW ERRORS运行(有多个地方存在),它只创建表,并完成。

DROP TABLE CDR.ExtDL_JobStatus succeeded. 
CREATE TABLE succeeded. 

当我删除所有的显示错误,下面是返回

DROP TABLE CDR.ExtDL_JobStatus succeeded. 
CREATE TABLE succeeded. 
anonymous block completed 
CREATE SEQUENCE succeeded. 
anonymous block completed 
TRIGGER CDR.ExtDL_JobStatus_SeqTrg Compiled. 
1 rows inserted 
1 rows inserted 
1 rows inserted 
ID      SHORTNAME    DESCRIPTION    
---------------------- ---------------------- ---------------------- 
1      1      1      
2      1      1      
3      1      1      

3 rows selected 

为什么执行在第一种情况下终止SHOW错误

+2

你用什么工具? 'show errors'是一个SQL * Plus命令,看起来您正在使用其他工具来运行您的脚本。 – 2010-08-09 14:52:34

+0

我正在使用Oracle SQL Developer来运行我的脚本 – 2010-08-09 15:06:04

+0

如果您在命令之间仅放置了一行/,那么行为是否会更改?我会在每个SQL语句后面放一个。只是一个想法 - 祝你好运。 – 2010-08-09 16:34:50

回答

2

尝试删除';'在每个SHOW ERRORS之后。

SQL * Plus命令(如SET,SHOW ERRORS等)不需要;并且可能的是,可能会重新运行将导致“对象已存在”错误的缓冲区中的先前命令(即,CREATE SEQUENCE)。 (为了证实这一点,我感到有点懒得触发甲骨文)。

就个人而言,我总是指定完整的命令 - 即

SHOW ERRORS TRIGGER ExtDL_JobStatus_SeqTrg