Не уверен, что это проблема Perl или Oracle. Я новичок в обоих.

У меня 1 строка в таблице. Его значение - число. Этот номер обновляется очень часто.

Когда я запускаю запрос выбора из Perl, чтобы получить это значение ... это не всегда последнее значение. Обычно это старое значение. Я запущу тот же запрос через SQLPLUS и увижу правильное значение ... Perl показывает правильное значение только в том случае, если я удалю данные в таблице и вставлю их снова.

Итак, мне интересно - этот запрос каким-то образом кешируется?

Вот как я выполняю запрос в Perl:

my $sql_latest_jobID = "SELECT /*+ NOCACHE */ job_number FROM example_table WHERE ID = 1";

my $sth = $dbh->prepare($sql_latest_jobID)
            or die "Couldn't prepare statement: " . $dbh->errstr;


            $sth->execute();
            my @data = $sth->fetchrow_array();
            $jobID = $data[0];

Я также пробовал Query без NOCACHE. Был такой же результат.

0
mscccc 30 Авг 2011 в 18:40

2 ответа

Лучший ответ

Я не знаю Perl, но кажется, что вы не фиксируете данные, и поэтому Perl не видит обновленное значение.

Другая возможность может заключаться в том, что Perl изменяет уровень изоляции на повторяющееся чтение. В этом случае вам нужно будет завершить текущую транзакцию в Perl (даже SELECT - это транзакция!), Выполнив фиксацию или откат (из Perl), чтобы увидеть обновленное значение.

6
a_horse_with_no_name 30 Авг 2011 в 14:44

Oracle не кэширует результаты таким образом. Вы всегда будете видеть, что находится в таблице (что совершено).

Итак, или перед oracle (в perl) вы используете какой-то кеш. или вы делаете банальную ошибку, например запрашиваете другую таблицу :)

1
Florin Ghita 30 Авг 2011 в 14:49