Пожалуйста, помогите мне с проблемой, я хочу написать триггер, где я могу вставлять значения в новую таблицу, когда вставка/обновление происходит в исходной таблице.Вставка/обновление Oracle SQL Trigger ---
Ниже представлена структура таблицы, откуда я хочу получить данные в другую таблицу.
СПИСОК ТАБЛИЦА
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 должен содержать листинг из таблицы листинга.
ii) OFFLINE COLUMN должна содержать данные с условием ниже.
AuditPassFlag = 'Y' AND AdminApprovalFlag = 'Y' И MgrOnlineFlag = 'Y' И DeletedFlag - это NULL AND SuspendedFlag!= 'Y'
iii) TIMESTAMP COLUMN lastupdated date from listing table.
LISTING_LASTUPDATE ТАБЛИЦА
Название Null Тип
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;
Это не сервис-код письма. Есть ли какой-то конкретный аспект создания триггера, с которым вам нужна помощь? Я уверен, что Oracle тратит много денег на их документацию, и это очень хорошо. Возможно, попробуйте прочитать его - http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/triggers.htm – OldProgrammer
@OldProgrammer: Я поделился с написанным тиражом, пожалуйста, посмотрите на него. –
Что вы имеете в виду, не работает - ошибка времени выполнения или ошибка компиляции? В коде триггера нет «ГДЕ». Пожалуйста, будьте более конкретными. – OldProgrammer