阻止Oracle缓存选择查询 - 从Perl运行查询

时间:2011-08-30 14:41:00

标签: perl oracle

不确定这是否是Perl或Oracle问题。我是两个人的新手。

我在表格中有一行。它的值是一个数字。这个号码经常更新。

当我从Perl运行select查询以获取此值时...它并不总是最新值。它通常是旧的价值。我将通过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 个答案:

答案 0 :(得分:6)

我不知道Perl,但似乎你没有提交数据,因此Perl没有看到更新的值。

另一种可能性是Perl将隔离级别更改为可重复读取。如果是这种情况,您需要通过发出提交或回滚(在Perl中)来结束Perl中的当前事务(即使SELECT是事务!),以便查看更新的值。

答案 1 :(得分:1)

Oracle不会以这种方式缓存结果。你总是会看到表中的内容(提交内容)。

所以,或者 在oracle(在perl中)之前,你使用了一些缓存。 要么 你做一个平庸的错误,例如查询另一个表:)