2017-06-05 115 views
0

我在PL/SQL中有一个脚本,它会删除一些表,序列,触发器,并在同一脚本中再次创建它们,我需要在我的网站中使用此脚本来删除数据库中的所有数据(我想在网站上按下一个按钮来访问这个脚本),所以我尝试在PL/SQL中执行一个函数/过程,从脚本文件逐行读取并执行每行动态sql,一切都正常,直到出现一个错误在:在PHP中运行PL/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: success with compilation error

我搜索了解决方案,但我没有找到任何东西。

+0

该触发器的错误消息在user_errors(或all_errors/dba_errors,取决于您连接的用户)中说的是什么?这应该给你一个线索,问题是什么。 – Boneist

回答

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中引用序列的效果相当。