序列和触发器,PL/SQL

序列和触发器,PL/SQL,sql,oracle,triggers,sequence,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 cont

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

很长一段时间,但看起来您在开始语句的引号之后和之前缺少了一个空格。

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

首先,没有明显的理由使用execute IMMEDIATE。有隐形的吗?看起来您应该删除它并直接在SQL模式下执行这些语句


接下来,您似乎忘记了使用冒号:NEW.stage\u char\u id为NULL应该是:NEW.stage\u char\u id为NULL,依此类推。

为什么要使用
立即执行
?您是否有理由需要从PL/SQL而不是普通SQL动态创建它们?(事实上,您不应该在第一条动态语句的末尾使用分号,并且您的
new
引用缺少一个冒号,但这些都不会导致该错误)。可以显示PL/SQL块或脚本的其余部分吗?删除
位于
创建序列
语句的末尾。只有在创建PL/SQL过程时,使用
execute immediate
时,常规SQL语句才不需要它。谢谢,这就是我最初使用它的方式,但运气不好。Blake,你能试着将语句本身(no execute immediate)键入任何用于手动与DB交互的内容吗?我正在尝试SQL小提琴,似乎还可以。获取错误:表不存在,但这意味着语法检查有效。当我这样做时,它实际上会编译,但随后我收到一个错误,该错误声明。未声明绑定变量“NEW”。