序列和触发器,PL / SQL

时间:2013-07-09 21:36:08

标签: sql oracle triggers sequence

我第一次使用Oracle,更多地用于sql server及其身份。但现在我正在尝试使用序列和触发器。但继续得到这个错误,我无法解决。

identifiers may not start with any ASCII character other than
       letters and numbers.  $#_ are also allowed after the first
       character.  Identifiers enclosed by doublequotes may contain
       any character other than a doublequote.  Alternative quotes
       (q'#...#') cannot use spaces, tabs, or carriage returns as
       delimiters.  For all other contexts, consult the SQL Language
       Reference Manual.

任何人都可以帮忙修复它,这是我的代码。

EXECUTE IMMEDIATE' CREATE SEQUENCE stagechardata_stagecharid
     START WITH 1 
     INCREMENT BY 1;';  

EXECUTE IMMEDIATE' CREATE OR REPLACE TRIGGER stagechardata_stagecharid_TRG
     BEFORE INSERT 
     ON stage_char_data
     FOR EACH ROW
     BEGIN
     IF NEW.stage_char_id IS NULL THEN
        SELECT stagechardata_stagecharid.NEXTVAL INTO NEW.stage_char_id
          FROM DUAL;
          END IF;
     END;';

3 个答案:

答案 0 :(得分:0)

远射,但看起来你在IMMEDIATE之后和开始声明的引用之前错过了一个空格。

答案 1 :(得分:0)

序列是包含SQL声明的对象,但不存储数据。 触发器是在表上发生操作时执行的SQL块。

答案 2 :(得分:0)

首先,没有明显的理由使用EXECUTE IMMEDIATE。有没有看不见的东西?看起来你应该只删除它并直接在SQL模式下执行这些语句。

接下来,看起来你忘了使用冒号:NEW.stage_char_id IS NULL应该是:NEW.stage_char_id IS NULL等等。