Можно ли написать триггер SQLite и / или хранимую процедуру, которая бы возвращала альтернативные данные в запросе SELECT, если данные не последние?Я знаю, как это можно сделать при выборе конкретной записи, потому что тогда идентификатор записи может быть передан в хранимую процедуру для оценки.Но я хочу, чтобы оператор SELECT * FROM TABLE
скрывал только релевантные данные, независимо от условий, указанных в последующем предложении WHERE
.Каждая отдельная запись должна быть оценена.Это может быть достигнуто путем изменения существующих данных или просто путем возврата ложного значения.Например, что-то вроде этого псевдокода:
for (RECORD in ALL_RECORDS_REQUESTED) {
// test if field contains value of interest and is more than one hour old
if ( ( fieldOfInterest LIKE '%VALUE_I_AM_CENSORING%' ) && ( recordTimestamp > ( recordTimestamp + 60 ) ) ) {
// change value of field before returning (or simply return false value)
fieldOfInterest = 'value I want you to see';
}
}
Достаточно сказать, что я не хочу, чтобы триггер изменял какие-либо данные, когда они изначально ВСТАВЛЯЮТСЯ или ОБНОВЛЯЮТСЯ в таблице, поскольку я хочу, чтобы исходное значениебыть доступным как минимум один час.После этого я хочу изменить его, если какие-либо операторы SELECT
запрашивают записи.
Возможно ли это в SQLite или для этого потребуется изменить приложение, взаимодействующее с базой данных?Я знаю, как кодировать это в приложении, но предпочел бы обрабатывать это в самой базе данных.
Это также может быть выполнено с помощью триггера, который автоматически добавляет условие к каждому оператору SQL, позволяя исключитьданные: WHERE NOT EXISTS (SELECT fieldOfInterest, recordTimestamp
FROM tblOfInterest
WHERE fieldOfInterest LIKE '%VALUE_I_AM_CENSORING%'
AND recordTimestamp > recordTimestamp + 60)
или что-то на этот счет ....