Perl PostgreSQL查询执行两次
我试图理解它为什么会发生,但我找不到它。SQL查询执行两次 我的剧本:Perl PostgreSQL查询执行两次,postgresql,perl,plpgsql,Postgresql,Perl,Plpgsql,我试图理解它为什么会发生,但我找不到它。SQL查询执行两次 我的剧本: my $driver = "Pg"; # Driver Name my $database = $ARGV[0]; # First argument will be database name my $dsn = "DBI:$driver:dbname=$database;host=127.0.0.1;port=5432"; my $userid = $ARGV[1]; # second argument will be u
my $driver = "Pg"; # Driver Name
my $database = $ARGV[0]; # First argument will be database name
my $dsn = "DBI:$driver:dbname=$database;host=127.0.0.1;port=5432";
my $userid = $ARGV[1]; # second argument will be username
my $password = $ARGV[2]; # third argument will be passwd
my $dbh = DBI->connect($dsn,$userid,$password, {RaiseError => 1 }) or die $DBI::errstr;
sub f_createUser {
if (scalar @_ != 3 ) {
return;
}
my $query = $dbh->prepare(qq{ SELECT createUserWithPassword(?,?) });
#my $result = $dbh->do($query) < 0 ? say "$DBI::errstr" : "# >>> Query worked successfully";
$query->execute($_[1],$_[2]);
}
&f_createUser(@revelantArray);
my$driver=“Pg”#驱动程序名称
my$database=$ARGV[0];#第一个参数将是数据库名称
my$dsn=“DBI:$driver:dbname=$database;host=127.0.0.1;port=5432”;
我的$userid=$ARGV[1];#第二个参数是用户名
我的$password=$ARGV[2];#第三个参数将是passwd
my$dbh=DBI->connect($dsn,$userid,$password,{RaiseError=>1})或die$DBI::errstr;
子f_createUser{
如果(标量@!=3){
返回;
}
my$query=$dbh->prepare(qq{选择createUserWithPassword(?,)});
#我的$result=$dbh->do($query)<0?说“$DBI::errstr”:“#>>>查询成功”;
$query->execute($\uU1],$\uU2]);
}
&f_createUser(@revelantArray);
当我执行脚本时,我得到:
DBD::Pg::st执行失败:错误:角色“tesstt”已存在
上下文:SQL语句“使用密码“123”创建用户tesstt”
PL/pgSQL函数createuserwithpassword(字符变化,字符
变化)homework2.pl第39行执行语句的第3行,
第1行。DBD::Pg::st执行失败:错误:角色“tesstt”已存在
存在上下文:SQL语句“使用密码创建用户”
“123”PL/pgSQL函数createuserwithpassword(字符
变化,字符变化)homework2.pl中EXECUTE语句的第3行
第39行,第1行
为什么会这样?我错过了什么
提前感谢…您有
PrintError=>1
,它会在出现错误时打印错误消息
您有RaiseError=>1
,它抛出一个包含错误消息的异常。未捕获的异常在程序结束时打印
将
PrintError=>0
添加到传递给DBI->connect
的选项中感谢您的关注,我是否有PrintError=>1?我在哪里有它?我应该在哪里添加PrintError=>0,您能再指定一点吗?这是连接的选项之一。这是默认值。allrigth但是我应该如何添加到PrintError=>0?我应该在哪里找到它?将它添加到连接的选项中。