在PHP中运行PL / SQL脚本

时间:2017-06-05 09:23:48

标签: oracle plsql

我在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:编译错误成功

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

1 个答案:

答案 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中引用序列的效果一样好。