我第一次使用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;';
答案 0 :(得分:0)
远射,但看起来你在IMMEDIATE之后和开始声明的引用之前错过了一个空格。
答案 1 :(得分:0)
序列是包含SQL声明的对象,但不存储数据。 触发器是在表上发生操作时执行的SQL块。
答案 2 :(得分:0)
首先,没有明显的理由使用EXECUTE IMMEDIATE。有没有看不见的东西?看起来你应该只删除它并直接在SQL模式下执行这些语句。
接下来,看起来你忘了使用冒号:NEW.stage_char_id IS NULL应该是:NEW.stage_char_id IS NULL等等。