2017-10-23 33 views
0

トリガーを作成すると、警告が表示されたばかりです。エラーメッセージがないので、デバッグはほとんどできません。私はクエリが正しいと思います。誰でも私を助けることができますか?私は感謝しています。トリガーを作成するときに警告が表示されます。警告:コンパイルエラーで作成されたトリガー

CREATE TRIGGER "TR_SERVICE_HISTORY_MESSAGE" 
    BEFORE INSERT OR UPDATE ON SERVICE_HISTORY 
     DECLARE FNAME(VARCHAR2 50);LNAME(VARCHAR2 50);DOGNAME(VARCHAR2 50);STOREAREA(VARCHAR2 50);DOGBREED(VARCHAR2 50); 
    BEGIN 
     IF(:NEW.FINISHED := 'T') THEN 
     SELECT F_NAME, L_NAME, DOG_NAME, STORE_AREA DOG_BREED 
    INTO FNAME, LNAME, DOGNAME, STOREAREA, DOGBREED FROM CUSTOMERS, DOGS, STORES 
     WHERE :NEW.DOG_ID = DOGS.DOG_ID, :NEW.STORE_ID = STORES.STORE_ID, CUSTOMER.C_ID = DOGS.C_ID; 
     :NEW.MESSAGE :='Hi '||FNAME||' '||LNAME||', your dog '||DOGNAME|| ' of breed: '||BREEDNAME|| 
    ' is ready for pick-up at '||STOREAREA||'.'; 
    ELSE 
    SELECT F_NAME, L_NAME, DOG_NAME, DOG_BREED 
    INTO FNAME, LNAME, DOGNAME, DOGBREED FROM CUSTOMERS, DOGS, STORES 
     WHERE :NEW.DOG_ID = DOGS.DOG_ID, :NEW.STORE_ID = STORES.STORE_ID, CUSTOMER.C_ID = DOGS.C_ID; 
    :NEW.MESSAGE :='Hi '||FNAME||' '||LNAME||', your dog '||DOGNAME|| ' of breed: '||BREEDNAME|| 
    ' is not ready for picked up yet.'; 
    END; 
    /
+1

[コンパイルエラーの表示方法](http://razorsql.com/articles/oracle_compile_errors.html)。私はそこにいくつかのエラー(少なくともあなたのvarchar2変数宣言)に気づいていますが、コードがランダムに整列していて、行が非常に長く、大文字ですべてがデバッグするのが簡単ではありません。また、行番号を含め、これらの種類のエラーをすぐに表示するツールの使用を検討することもできます。私はオラクル独自の[SQL Developer](http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html)は無料で、これを行うことができると思います。 – GolezTrol

+0

コードをコンパイルするのにどのツールを使用していますか?コンパイルエラーメッセージが表示されない場合は、役に立たないか、正しく使用していないかのいずれかです。 –

答えて

2

コードに非常に基本的なエラーがあります。少なくとも有効なplsqlであるコードブロックがあります。

declare 
    fname  varchar2(50); 
    lname  varchar2(50); 
    dogname varchar2(50); 
    storearea varchar2(50); 
    dogbreed varchar2(50); 
begin 
    if :new.finished = 'T' 
    then 
     select f_name 
      ,l_name 
      ,dog_name 
      ,store_area dog_breed 
     into fname 
      ,lname 
      ,dogname 
      ,storearea 
      ,dogbreed 
     from customers 
      ,dogs 
      ,stores 
     where :new.dog_id = dogs.dog_id 
     and :new.store_id = stores.store_id 
     and customer.c_id = dogs.c_id; 
     :new.message := 'Hi ' || fname || ' ' || lname || ', your dog ' || dogname || ' of breed: ' || 
         breedname || ' is ready for pick-up at ' || storearea || '.'; 
    else 
     select f_name 
      ,l_name 
      ,dog_name 
      ,dog_breed 
     into fname 
      ,lname 
      ,dogname 
      ,dogbreed 
     from customers 
      ,dogs 
      ,stores 
     where :new.dog_id = dogs.dog_id 
     and :new.store_id = stores.store_id 
     and customer.c_id = dogs.c_id; 

     :new.message := 'Hi ' || fname || ' ' || lname || ', your dog ' || dogname || ' of breed: ' || 
         breedname || ' is not ready for picked up yet.'; 
    end if; 
end; 
関連する問題