2017-06-05 7 views
0

私はPL/SQLでスクリプトを使用していますが、いくつかのテーブル、シーケンス、トリガを落として同じスクリプトで再度作成するので、データベースからすべてのデータを削除するために、 (そして私はこのスクリプトにアクセスしてWebサイトのボタンを押しています)ので、スクリプトファイルから行ごとに読み込んで、動的SQLを使ってすべての行を実行するPL/SQLで関数/プロシージャを実行しようとしましたが、で:PHPでPL/SQLスクリプトを実行しています

ORA-24344: success with compilation error

CREATE OR REPLACE TRIGGER players_bir BEFORE INSERT ON players FOR EACH ROW BEGIN SELECT players_seq.NEXTVAL INTO :new.id FROM dual END

これは私にエラーを与えました

私は解決策を探しましたが、何も見つかりませんでした。

+0

そのトリガーのエラーメッセージは、user_errors(または接続先のユーザーに応じてall_errors/dba_errors)に表示されますか?それはあなたに、問題が何であるかの手がかりを与えるはずです。 – Boneist

答えて

0

SELECTステートメントでデュアル後にセミコロンがありません。このORAエラーは、通常、コードをコンパイルすることを意味しますが、それには問題があります。 ALL_ERRORSで探し

CREATE OR REPLACE TRIGGER players_bir 
    BEFORE INSERT ON players 
    FOR EACH ROW 
BEGIN 
    SELECT players_seq.nextval 
    INTO :new.id 
    FROM dual; 
END 

は問題があるか、手動で(SQL Developerのような)いくつかのIDEにこのトリガーをコンパイル可能性があり、それはまた、それは明らかにするべきかを紹介します。

さらに
SELECT * 
    FROM all_errors e 
WHERE e.name = 'PLAYERS_BIR' 
    AND e.type = 'TRIGGER'; 

あなたがあなたのトリガーを使用しているすべては、いくつかのID列を設定することで、あなたがこれを達成するためにnew featuresの一部を使用できるOracle 12cの上にある場合。トリガーは本質的に遅く、新しいID機能はINSERTでシーケンスを直接参照するほどの性能を発揮します。

関連する問題