Написание триггера базы данных SQLite для скрытия определенных данных от запросов SELECT - PullRequest
0 голосов
/ 05 февраля 2012

Можно ли написать триггер 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)

или что-то на этот счет ....

1 Ответ

2 голосов
/ 05 февраля 2012

Триггеры запускаются только при возникновении DELETE, INSERT или UPDATE определенной таблицы базы данных или при возникновении UPDATE в одном или нескольких указанных столбцах таблицы,

Вы можете использовать VIEW, чтобы выполнить то, что вы хотите, но тогда весь доступ к данным должен пройти через это представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...