gpt4 book ai didi

mysql - perl 使用另一个数据库的值更新 oracle 数据库

转载 作者:搜寻专家 更新时间:2023-10-30 20:10:07 24 4
gpt4 key购买 nike

我正在编写一个 perl 脚本,用 mysql 数据库中的数据更新 oracle 数据库中的表。

我是 perl 的新手,所以任何帮助将不胜感激。

我目前有以下内容,它不会更新 oracle 数据库,但也不会抛出任何错误。

数据库都已初始化。

我希望 oracle tblrecommendations 表的性能更新为 mysql tblrecommendations 表中的内容。

提前致谢。

#transfer data
sub do_crc_company_performance {

my ($sth_mysql, $sth_oracle);
my $sql_details = <<END_SQL;
select
tblRecommendations.code,
tblRecommendations.performance
from
crc.tblRecommendations
where
length(tblRecommendations.code) = '3'
END_SQL

# variables to bind values to

my ($code, $performance);

eval {
# prepare our select statement for mysql
$sth_mysql = $dbh_mysql->prepare($sql_details);
$sth_mysql->execute;
$sth_mysql->bind_columns(\($code, $performance));
# create oracle insertion query
$sth_oracle = $dbh_oracle->prepare(q{UPDATE TBLRECOMMENDATIONS
SET PERFORMANCE = '$performance'
WHERE CODE = '$code'});
while ( $sth_mysql->fetch ) {
$performance = Encode::decode_utf8($performance); # set the flag
# feed the data into the tblRecommendations table
$sth_oracle->execute();
}
};

if ($@) {
# what went wrong
push (@errors, "Unable to update company details: $@");
# rollback our transaction
$dbh_oracle->rollback()
}
$sth_oracle->finish if ($sth_oracle);
$sth_mysql->finish if ($sth_mysql);
}

最佳答案

你的问题是你的q{} quoting ,这是没有插值的文字字符串引用。因此,您正在搜索 code 字段设置为五个字符的文字字符串值 $code 的记录。

一种解决方案是使用插值引用 — ""qq{}。然而,这很容易引起不愉快的 SQL 注入(inject),因此 strongly discouraged .

如您所见,更好的解决方案是使用 bind values让 RDBMS 驱动程序为您处理引用和转义。但是,在这种情况下您不需要中介 $sth:

$dbh_ora->do(q{UPDATE tbl SET foo = ? WHERE bar = ?}, undef, $new_foo, $bar);

现在,我推断您设置了 RaiseError(好!),并且您不关心更新的行数,因此您甚至不需要捕获调用 do 的返回值()

关于mysql - perl 使用另一个数据库的值更新 oracle 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19554768/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com