Oracle 在PHP中运行PL/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:编译错误成

我有一个PL/SQL脚本,可以删除一些表、序列、触发器,然后在同一个脚本中再次创建它们,我需要在我的网站中使用该脚本来删除数据库中的所有数据(我想按网站上的一个按钮访问该脚本)因此,我尝试用PL/SQL编写一个函数/过程,从脚本文件中逐行读取,并用动态SQL执行每一行,一切正常,直到出现一个错误:

创建或替换触发器播放器\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错误,取决于您连接的用户)中表示什么?这应该会给你一个关于问题所在的线索。