从缓存中停止Oracle选择查询 - 从Perl运行查询
问题描述:
不确定这是Perl还是Oracle问题。我对这两个都很陌生。从缓存中停止Oracle选择查询 - 从Perl运行查询
我表中有1行。它的值是一个数字。此号码经常更新。
当我运行从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。有相同的结果。
答
我不知道Perl的,但似乎你是不是在提交数据,因此Perl不会看到更新后的值。
另一种可能是Perl改变隔离级别设置为可重复读。如果是这样的话,您需要通过发出提交或回滚(从Perl内部)来结束当前的Perl事务(即使是一个事务!)以查看更新的值。
+0
我没有犯。现在工作。谢谢你的帮助! – mscccc
答
Oracle不会以这种方式缓存结果。你总是会看到表中的内容(提交的内容)。
所以,还是 甲骨文(Perl中)在你使用一些缓存。 或 你做出一个平庸的错误,例如查询另一个表:)
这是不可能的。你确定你更新过吗? Oracle不允许脏读,所以如果您没有在SQL * Plus中提交更改,您将无法在Perl中看到它们 - 请注意,每个会话都是独立的。 – NullUserException