不确定这是否是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的查询。得到了相同的结果。
答案 0 :(得分:6)
我不知道Perl,但似乎你没有提交数据,因此Perl没有看到更新的值。
另一种可能性是Perl将隔离级别更改为可重复读取。如果是这种情况,您需要通过发出提交或回滚(在Perl中)来结束Perl中的当前事务(即使SELECT是事务!),以便查看更新的值。
答案 1 :(得分:1)
Oracle不会以这种方式缓存结果。你总是会看到表中的内容(提交内容)。
所以,或者 在oracle(在perl中)之前,你使用了一些缓存。 要么 你做一个平庸的错误,例如查询另一个表:)