Никогда не поздно опубликовать ответы в StackOverflow, так как люди (включая меня) продолжают искать вещи годами, когда вопрос задавался. Возможно, это не тот ответ, который вы ищете, но считайте это наблюдением, которое может привести вас в правильном направлении. У меня недостаточно очков, чтобы оставлять «комментарии», поэтому я набираю это как ответ.
Чтобы воссоздать проблему, я создал таблицу
CREATE TABLE TEST_DB_NOTIFICATION
(
COLUMN1 VARCHAR2(1 BYTE),
COLUMN2 VARCHAR2(1 BYTE)
)
Я использовал следующий код .Net (незначительные изменения в вашем)
private void button1_Click(object sender, RoutedEventArgs e)
{
OracleConnection _connObj = new OracleConnection("Data Source=mydb;User Id=myid;Password=mypassword;");
_connObj.Open();
OracleCommand _cmdObj = _connObj.CreateCommand();
_cmdObj.CommandText = " SELECT column1 FROM ods.test_db_notification where column1 = 'a' ";
OracleDependency _dep = new OracleDependency(_cmdObj);
_dep.QueryBasedNotification = true;
_dep.OnChange += new OnChangeEventHandler(_dep_OnChange);
_cmdObj.Notification.IsNotifiedOnce = false;
_cmdObj.AddRowid = true;
_cmdObj.ExecuteNonQuery();
}
void _dep_OnChange(object sender, OracleNotificationEventArgs eventArgs)
{
MessageBox.Show("changed" + eventArgs.Details.Rows.Count);
}
По сути, я делаю то же самое, что и вы, но вместо этого я наблюдаю за Column1 = 'a'.
То, что я заметил, ниже:
** ВСТАВИТЬ поведение **
1) Когда я вставляю в таблицу, я получаю уведомление, когда новая строка имеет значение Column1 = 'a'.
2) Я не получаю уведомление, когда значение Column1 не равно «a».
** ОБНОВЛЕНИЕ поведения **
1) Когда я обновляю таблицу, в результате чего существующие значения в столбце 1 меняются на «а», а не на «а», я получаю уведомление.
2) Я получаю уведомление, почему я снова меняю столбцы, значение которых уже равно «a», чтобы быть «a».
3) Я получаю уведомление, если я изменяю значения с «a» на «z» в столбце 1.
** УДАЛИТЬ поведение **
1) Я получаю уведомление, когда удаляю строки со значением Column1 = 'a'
2) Я не получаю уведомление, когда значение Column1 не равно 'a'
Это приводит меня к очевидному выводу, что если есть какие-либо изменения в строках, которые квалифицируются как результаты оператора, который вы просматриваете (включая изменения, которые перезаписывают существующие значения для самого себя), вы получаете уведомление. Это соответствует поведению INSERT, UPDATE и DELETE.