【发布时间】:2011-08-30 22:49:50
【问题描述】:
不确定这是 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 的查询。有同样的结果。
【问题讨论】:
-
这是不可能的。你确定你已经提交了更新吗? Oracle 不允许脏读,因此如果您没有在 SQL*Plus 中提交更改,您将无法在 Perl 中看到它们 - 请注意,每个会话都是独立的。