0

ソーステーブルで挿入/更新が発生するたびに新しいテーブルに値を挿入できるトリガーを作成したいので、問題を解決してください。

以下は、データを別のテーブルにフェッチするテーブル構造です。

リスト表

Name Null Type


LISTINGID NOT NULL VARCHAR2(28)
LISTINGMANAGERID NOT NULL VARCHAR2(28)
MANAGEAVAILABILITYFLAG VARCHAR2(1)
AVAILABILITYTEXT VARCHAR2(2000)

AREAINQUIRYFLAG VARCHAR2(1)
COUNTRYTEXT VARCHAR2(50)
STATEPROVINCETEXT VARCHAR2(50)
CITYTEXT VARCHAR2(50)
CHECKINTIME VARCHAR2(10)
CHECKOUTTIME VARCHAR2(10)
TIMEZONEID VARCHAR2(20)

PERSONALLINKURL VARCHAR2(150)

GOLDSUBSCRIPTIONSINCE DATE
AUDITPASSFLAG NOT NULL VARCHAR2(1)
MGRONLINEFLAG NOT NULL VARCHAR2(1)
ADMINAPPROVALFLAG NOT NULL VARCHAR2(1)
DELETEDFLAG VARCHAR2(1)
LASTUPDATED NOT NULL DATE
UPDATEDBY NOT NULL VARCHAR2(28)
OCA NOT NULL NUMBER(38)
SUSPENDEDFLAG NOT NULL VARCHAR2(1)
POSSIBLEFEATUREDCITYFLAG NOT NULL VARCHAR2(1)
TOTALPHOTOS NUMBER(38)
SUSPENDEDDATE DATE
OFFLINEDATE DATE
CURRENCY VARCHAR2(3)
POINTCHARGE VARCHAR2(2)
AVERAGEOFREVIEWS FLOAT(126)
NUMBEROFREVIEWS NUMBER(38)
RENTALMODEL VARCHAR2(10)
NOTHANKS VARCHAR2(1)
DIGITALSIGN VARCHAR2(50)

リスト表からの更新または新規挿入を伴う以下の表の結果が必要です。

i) listingid には、リスト テーブルからの listid が含まれている必要があります。

ii) OFFLINE COLUMN には、以下の条件のデータが含まれている必要があります。

AuditPassFlag = 'Y' AND AdminApprovalFlag='Y' AND MgrOnlineFlag='Y' AND DeletedFlag は NULL AND SuspendedFlag !='Y'

iii) TIMESTAMP COLUMN リスト表からの最終更新日。

LISTING_LASTUPDATE テーブル

名前空型


LISTINGID NOT NULL VARCHAR2(20)

IS_OFFLINE VARCHAR2(1)

TIMESTAMP TIMESTAMP(0)

私が書いているトリガーの下に:

リストがオンラインであることを意味する場所の条件に対して適切に機能していません。それを除けば、正常に機能します。

CREATE OR REPLACE TRIGGER listingLast_updated
   AFTER INSERT OR UPDATE
   ON listing
   FOR EACH ROW

DECLARE
   L_Listingid             VARCHAR2 (20);

   L_ISOFFLINE             VARCHAR2 (1);

   LASTUPDATED_TIMESTAMP   DATE;
BEGIN
   SELECT SYSDATE INTO LASTUPDATED_TIMESTAMP FROM DUAL;

   IF (    :NEW.AuditPassFlag = 'Y'
       AND :NEW.AdminApprovalFlag = 'Y'
       AND :NEW.MgrOnlineFlag = 'Y'
       AND :NEW.DeletedFlag IS NULL
       AND :NEW.SuspendedFlag != 'Y') THEN
      L_ISOFFLINE := 'Y';
   ELSE
      L_ISOFFLINE := 'N';

      INSERT
        INTO LISTING_LastUPDATED (LISTINGID, IS_OFFLINE, LASTUPDATED_TIMESTAMP)
      VALUES (:NEW.LISTINGID, L_ISOFFLINE, LASTUPDATED_TIMESTAMP);
   END IF;
END;
4

1 に答える 1