2017-01-18 13 views
0

INTフィールドの最小値を設定するテーブルPACKSのトリガーを取得しようとしています - 新しいPACKを挿入するときにPRICE - たとえば '333'。プロシージャーの新しいパックを呼び出すための挿入です。 は、トリガーのthats:設定された分のOracle SQLトリガー値がNULLのINTフィールド

CREATE OR REPLACE TRIGGER pack_min_price 
BEFORE 
INSERT 
ON PACKS 
FOR EACH ROW 
BEGIN 
IF new.PRICE < 333 THEN 
:new.PRICE := :new.PRICE + 333; 
END IF; 
END; 

とPROCEDUREのthats:

create or replace PROCEDURE newPack(
cntr IN PACKS.COUNTRY%TYPE, 
trns IN PACKS.TRANSPORT%TYPE, 
htl IN PACKS.HOTEL%TYPE, 
extr IN PACKS.HOTELEXTRAS%TYPE, 
othextr IN PACKS.OTHEREXTRAS%TYPE, 
strdt IN PACKS.STARTDATE%TYPE, 
enddt IN PACKS.ENDDATE%TYPE, 
prc IN PACKS.PRICE%TYPE) 

IS 
BEGIN 
    INSERT INTO PACKS 
    (COUNTRY,TRANSPORT,HOTEL,HOTELEXTRAS,OTHEREXTRAS,STARTDATE,ENDDATE,PRICE) 
VALUES 
    (cntr,trns,htl,extr,othextr,strdt,enddt,prc); 

COMMIT; 

END; 

エラー私はトリガーをコンパイルしようとすると、私が取得 -

Compilation failed, line 2 (10:12:41) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers. 
PLS-00201: identifier 'NEW.PRICE' must be declaredCompilation failed, line 2 (10:12:41) The line numbers associated with compilation errors are relative to the first BEGIN statement. This only affects the compilation of database triggers. 
PL/SQL: Statement ignored 

と私は手順を開始します -

ORA-04098: trigger 'PROJECT160.PACK_MIN_PRICE' is invalid and failed re-validation 
トリガーなしで210

プロシージャは完全に正常に動作しています。手伝ってくれますか? thx

答えて

0

IFステートメントの新しいインスタンスに:がありません。

IF :new.PRICE < 333 THEN 
    :new.PRICE := :new.PRICE + 333; 
END IF; 
+0

私はコーヒーが必要だと思う:( –

+0

は、すべての時間に発生:助けてPはちょうど嬉しい私がチェックし、Oracle SQL Developerは、コンパイルにそれをキャッチ。 – Thor

関連する問題