0

我是第一次使用 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;';
4

3 回答 3

0

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

接下来,您似乎忘记使用冒号: NEW.stage_char_id IS NULL 应该是 :NEW.stage_char_id IS NULL 等等。

于 2014-12-17T05:21:52.010 回答
0

序列是包含 SQL 语句但不存储数据的对象。触发器是在对表进行操作时执行的 SQL 块。

于 2013-12-15T14:49:10.740 回答
0

远射,但看起来您在 IMMEDIATE 之后和开始声明的引号之前缺少一个空格。

于 2013-07-09T21:50:52.570 回答