我在PL / SQL中有一个脚本,删除了一些表,序列,触发器,并在同一个脚本中再次创建它们,我需要在我的网站中使用这个脚本删除数据库中的所有数据(我想访问这个脚本在网站上按一个按钮)所以我试图在PL / SQL中执行一个函数/过程,从脚本文件中逐行读取并使用动态sql执行每一行,一切都正常,直到出现一个错误:
CREATE OR REPLACE TRIGGER players_bir BEFORE INSERT ON players FOR EACH ROW BEGIN SELECT players_seq.NEXTVAL INTO :new.id FROM dual END
这给了我错误:
ORA-24344:编译错误成功
我搜索了解决方案,但我找不到任何东西。
答案 0 :(得分:0)
在SELECT语句中双重后丢失分号。这个ORA错误通常意味着您编译了一些代码,但这有一些问题。
CREATE OR REPLACE TRIGGER players_bir
BEFORE INSERT ON players
FOR EACH ROW
BEGIN
SELECT players_seq.nextval
INTO :new.id
FROM dual;
END
查看all_errors将显示问题所在,或者您可以在某些IDE(例如SQL Developer)中手动编译此触发器,这也应该使其显而易见。
SELECT *
FROM all_errors e
WHERE e.name = 'PLAYERS_BIR'
AND e.type = 'TRIGGER';
此外,如果您使用触发器的所有方法是设置一些标识列并且您使用的是Oracle 12c,则可以使用new features中的一些来完成此操作。触发器本质上很慢,新的身份特征的性能与直接在INSERT中引用序列的效果一样好。