如果数据不是最新的,是否可以编写一个SQLite触发器和/或存储过程,它将在SELECT请求中返回备用数据?我知道在选择特定记录时如何做到这一点,因为记录ID可以传递给存储过程进行评估。但我希望SELECT * FROM TABLE
语句只隐藏相关数据,无论后续WHERE
子句中指定的条件如何。必须评估每个单独的记录。这可以通过修改现有数据或简单地返回false值来实现。例如,像这样的伪代码:
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';
}
}
我只想说我不希望触发器在表中最初INSERTED或UPDATED时修改任何数据,因为我希望原始值至少可以使用一小时。之后,如果任何SELECT
语句请求记录,我希望它被更改。
这在SQLite中是否可行,或者这是否需要修改与数据库交互的应用程序?我知道如何在应用程序中编写代码,但更愿意在数据库本身内处理它。
这也可以通过一个触发器来完成,该触发器会自动将条件附加到每个SQL语句,从而允许排除数据:
WHERE NOT EXISTS (SELECT fieldOfInterest, recordTimestamp
FROM tblOfInterest
WHERE fieldOfInterest LIKE '%VALUE_I_AM_CENSORING%'
AND recordTimestamp > recordTimestamp + 60)
或者这种效果......