Остановить Oracle от кеширования запроса выбора - Выполнение запроса из Perl - PullRequest
0 голосов
/ 30 августа 2011

Не уверен, что это проблема 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];

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

Ответы [ 2 ]

6 голосов
/ 30 августа 2011

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

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

1 голос
/ 30 августа 2011

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

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

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