Oracle 在PHP中运行PL/SQL脚本
我有一个PL/SQL脚本,可以删除一些表、序列、触发器,然后在同一个脚本中再次创建它们,我需要在我的网站中使用该脚本来删除数据库中的所有数据(我想按网站上的一个按钮访问该脚本)因此,我尝试用PL/SQL编写一个函数/过程,从脚本文件中逐行读取,并用动态SQL执行每一行,一切正常,直到出现一个错误:Oracle 在PHP中运行PL/SQL脚本,oracle,plsql,Oracle,Plsql,我有一个PL/SQL脚本,可以删除一些表、序列、触发器,然后在同一个脚本中再次创建它们,我需要在我的网站中使用该脚本来删除数据库中的所有数据(我想按网站上的一个按钮访问该脚本)因此,我尝试用PL/SQL编写一个函数/过程,从脚本文件中逐行读取,并用动态SQL执行每一行,一切正常,直到出现一个错误: 创建或替换触发器播放器\u bir在插入每行播放器之前开始选择播放器\u seq.NEXTVAL-INTO:new.id FROM dual END 这给了我一个错误: ORA-24344:编译错误成
创建或替换触发器播放器\u bir在插入每行播放器之前开始选择播放器\u seq.NEXTVAL-INTO:new.id FROM dual END
这给了我一个错误:
ORA-24344:编译错误成功
我搜索了解决方案,但没有找到任何结果。您的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
查看所有的_错误将向您显示问题所在,或者您可以在某些IDE(如)中手动编译此触发器,这也会使问题变得显而易见
SELECT *
FROM all_errors e
WHERE e.name = 'PLAYERS_BIR'
AND e.type = 'TRIGGER';
此外,若您使用触发器的目的只是设置某个标识列,并且您使用的是Oracle 12c,那个么您可以使用其中的一些来完成此任务。触发器本身速度较慢,新的标识功能的性能与直接在插入中引用序列差不多。该触发器的错误消息在用户错误(或所有错误/dba错误,取决于您连接的用户)中表示什么?这应该会给你一个关于问题所在的线索。