2011-01-17 69 views
0

に期待されている私は、このトリガーを作成しようと、次のコンパイラエラーを取得しています:エラー(2,7):PLS-00428:INTO句このSELECT文

create or replace 
TRIGGER RESTAR_PLAZAS 
AFTER INSERT ON PLAN_VUELO 
BEGIN 
SELECT F.NRO_VUELO, M.CAPACIDAD, M.CAPACIDAD - COALESCE((
SELECT count(*) FROM PLAN_VUELO P 
WHERE P.NRO_VUELO = F.NRO_VUELO 
     ), 0) as PLAZAS_DISPONIBLES 
FROM VUELO F 
     INNER JOIN MODELO M ON M.ID = F.CODIGO_AVION; 
END RESTAR_PLAZAS; 


Error(2,7): PL/SQL: SQL Statement ignored 
Error(8,5): PL/SQL: ORA-00933: SQL command not properly ended 
Error(8,27): PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:  begin case declare end exception exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identifier> <a bind variable> << close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe 
Error(2,1): PLS-00428: an INTO clause is expected in this SELECT statement 

このトリガーと間違って何?

+0

。トリガーが結果セットとしてデータを 'SELECT'しようとしているように見えますが、これはトリガーでは合法ではありません。あなたは何をしようとしているのですか? –

+0

あなたの質問すべてで、あなたが達成しようとしているものを見ることができるように課題の概要を投稿すれば助けになるかもしれません。また、エラーメッセージの意味を調べて、割り当てについての質問をする前にドキュメントを参照するか、エクササイズから実際に多くを学ぶことはまずありません。いくつかの重複があるように、わずかに異なるフォームで同じ質問を投稿していないことを確認してください。 –

答えて

1

PL/SQLブロック内には、SELECT ... INTOの何かが必要です。私は昨日のあなたの質問の1つに答えてこれの例を持っていました。この場合、ローカル変数を選択し、結果を使用して別のテーブルを更新することができます。

しかし、興味のある値に制限されていないため、おそらく多くの結果が返ってくるようです。 WHERE句は、挿入された行の:NEW値のいずれにもフィルタリングしません。 ORA-02112が発生します。実際に複数の行が必要な場合は、選択によって正確に1つの行が返されるようにするか、カーソルを参照する必要があります。

2

あなたはトリガを使用しないでくださいPLAN_VUELO

上のトリガにPLAN_VUELO

FROM

SELECT COUNT(*)に許可されません。ストアドプロシージャを使用します。

+1

良い点。 OPの他の質問から、私はそれが実際に彼がとにかくやっていたものであるかどうかはわかりませんが。 –

0

ただ、結果の型、1例に係る句に追加します。私は神託を知っているが、病気ここでショットを取ることはありません

declare 
    my_result VUELO%rowtype; 
begin 
    select v.* into my_result from VUELO v where id = '1'; 
end;