2016-10-27 9 views
0

application_historyという表の時刻を更新しようとしていますが、それぞれの列名が列名に 'status'を設定しようとする 'CASE'セクションにリストされています。その後、その列を使用してその列に時間を挿入しようとします。 ここに私が試みたのは、トリガーの制限が何であるか分かりません。SQL on ORACLE APEX 5.x

create or replace TRIGGER update_application_history AFTER UPDATE ON application 
FOR EACH ROW 
DECLARE 
    status VARCHAR(35); 
BEGIN 
    CASE 
    WHEN old.application_status LIKE 'Application Withdrawn' THEN SET status = 'APPLICATION_WITHDRAWN' 
    WHEN old.application_status LIKE 'Applicant Accepted Offer' THEN SET status = 'APPLICANT_ACCEPTED_OFFER' 
    WHEN old.application_status LIKE 'Applicant Declined Offer' THEN SET status = 'APPLICANT_DECLINED_OFFER' 
    WHEN old.application_status LIKE 'Applicant Invited for Assessment' THEN SET status = 'INVITED_TO_ASSESMENT_CENTRE' 
    WHEN old.application_status LIKE 'Applicant Invited for Interview' THEN SET status = 'INVITED_FOR_INTERVIEW' 
    WHEN old.application_status LIKE 'Applicant Offered Position' THEN SET status = 'APPLICANT_OFFERED_POSITION' 
    WHEN old.application_status LIKE 'Applicant Rejected'THEN SET status = 'APPLICANT_REJECTED' 
    END 
UPDATE application_history 
SET status = TO_CHAR(SYSDATE, 'DD/MM/YYYY HH24:MI:SS') 
WHERE old.arn LIKE arn 
END; 

答えて

2
  1. あなたは変数に値の
  2. 割り当ては、PL/SQLで:=演算子で処理されます(少なくともないような)PL/SQLで動的な列名を使用することはできません。あなたはapplication_historyテーブル内varchar2ようsysdateを保存なぜあなたは本当に=
  3. を使用する必要があるとき
  4. LIKEを使用しないでください?おそらくこれらの列は実際にはタイプvarchar2ですが、日付のみが格納されている場合は、それをdateに変更することを検討してください。すべてのすべてで

、あなたのトリガーは次のようになります。

create or replace TRIGGER update_application_history AFTER UPDATE ON application 
FOR EACH ROW 
BEGIN 
    CASE 
    WHEN :old.application_status = 'Application Withdrawn' 
    THEN 
     UPDATE application_history 
     SET APPLICATION_WITHDRAWN = sysdate 
     WHERE :old.arn = arn; 
    WHEN :old.application_status = 'Applicant Accepted Offer' 
    THEN 
     UPDATE application_history 
     SET APPLICANT_ACCEPTED_OFFER = sysdate 
     WHERE :old.arn = arn; 
    -- you get the point... add the rest here 
    END CASE; 
END; 
+0

を助けてくれてありがとう。 – Zachary

+0

私は次のものを使用します:=将来、アプリケーション履歴のregradasで、日付を使用しようとしましたが、列に日付だけが表示され、時間も表示する必要があります。それ以外の方法ですが、それはアプリケーション上で表現されているため、DATEの形式を変更することはできません。結局、私はVARCHARの代替案をあきらめて使いました。 – Zachary

+1

@Zachary 'sysdate'いつも同様に時刻を保存していますので、' to_char(application_accepted_offer、 'DD-MM-YYYY HH24:MI:SS')をapplication_history'から実行するとチェックできます。日付がどのように*保存されているかは、表示方法とはまったく異なります。 –