带有 sql 连接字符串的 perl 脚本看似故障转移点(。)

Posted

技术标签:

【中文标题】带有 sql 连接字符串的 perl 脚本看似故障转移点(。)【英文标题】:perl script with sql connection string seemingly failing over point(.) 【发布时间】:2016-03-21 01:50:43 【问题描述】:

我在将 sql 函数的返回值插入变量时遇到了一些问题。当我运行下面的代码(连接字符串肯定有效)时,我收到以下错误:

在 Script.pl 第 34 行的操作员预期的位置找到了裸字, 靠近“'SELECT IDENT_CURRENT('数据库” (在数据库之前缺少运算符?) Script.pl 第 34 行的语法错误,靠近“'SELECT IDENT_CURRENT ('Database" Script.pl 第 34 行的 Table' 后面的错误名称。

我之前使用此语法成功准备/执行了 sql 语句。我尝试使用 $dbh->prepare ("SELECT IDENT_CURRENT ('Database.dbo.Table')") 注意“”。 然后脚本执行,但我的变量 $RID 只包含不正确的 -1。 我在 sql 服务器上运行纯 sql 代码作为查询,效果很好。 任何帮助将不胜感激。

#!/usr/bin/perl
## PERL MODULES
 use DBI;
 use DBD::ODBC;
 use Text::CSV;
 use POSIX;
 use List::MoreUtils qw( each_array );
 no strict "vars";

    my $dbh = DBI->connect($data_source, $user, $password, RaiseError => 0, PrintError => 1) or die "Can't connect to $data_source: $DBI::errstr";


    my $id_return = $dbh->prepare ('SELECT IDENT_CURRENT ('Database.dbo.Table')');
    my $RID = $id_return->execute;
    print $RID;

【问题讨论】:

【参考方案1】:

不要关闭strict。那从不*修复任何东西,它只是隐藏错误。打开warnings。这也是个好主意。

您的问题是 - 您正在嵌套单引号:

''SELECT IDENT_CURRENT ('Database.dbo.Table')''

那是行不通的。使用\' 转义它们或仅使用:

qSELECT IDENT_CURRENT ('Database.dbo.Table')

* 好的,好的。 几乎从来没有。就 Stack Overflow 上的问题而言,它是“总是”的一个足够好的近似值。

【讨论】:

这确实解决了语法错误。经过更多测试后,我发现下面的代码有效。 $query = "SELECT IDENT_CURRENT ('dbo.Table')"; $sth = $dbh->prepare($query); $sth->执行(); $RID = $sth->fetchrow();打印 $RID;

以上是关于带有 sql 连接字符串的 perl 脚本看似故障转移点(。)的主要内容,如果未能解决你的问题,请参考以下文章

在 Perl 脚本中运行 PL/SQL 过程

在cmd 中执行perl脚本报错 Unrecognized character

Perl 字符串连接的奇怪行为

Raku vs. Perl5,出人意料的结果

如何使用带有 Bitnami LAMP Stack 的 mozilla 执行脚本 Perl?

MS Access Professional Plus 2019 的 Perl 连接字符串