2017-06-05 121 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中引用序列的效果相當。