我正在从sql数据库中读取列的值。现在,我想以逗号转换行中的列值(例如:-“ abc”,“ xyz”)
Source Data:-
amol
aakash
shami
krishna
Output expected: ( "amol","aakash","shami","krishna")
我正在尝试的代码:-
#!/usr/bin/env perl
$t = `date`;
#print $t;
$GCMS_SERVER = $ENV{DSQUERY};
$GCMS_USERNAME = $ENV{GCMS_USERNAME};
$GCMS_PASSWORD = $ENV{GCMS_PASSWORD};
$GCMS_DATABASE = $ENV{GCMS_DATABASE};
#print "test\n";
my $query = "SELECT Label FROM FeedGenSource WHERE BaseFileName ='aldgctna'";
#print "SQL =$query\n";
my $sqlcmd = (qq/
set nocount on
go
use $GCMS_DATABASE
go
$query
/);
open(::DBCMD, "sqsh -S$GCMS_SERVER -U$GCMS_USERNAME -h -w100 -P- <<EOF
$GCMS_PASSWORD
$sqlcmd
go
EOF
|") || die("Could not communicate with DB ");
while(<::DBCMD>){
print "$_";
}
#print "done\n";
close ::DBCMD;
exit
这是perl脚本。我想在查询中使用语句中的输出。
答案 0 :(得分:2)
您的输出来自代码的这一部分:
while(<::DBCMD>){
print "$_";
}
文件句柄::DBCMD
已连接到sqsh
命令的输出。您的代码从该文件句柄读取每条记录,并将其打印到STDOUT
。
如果您想对输出进行更巧妙的处理,则必须将数据存储在某种数据结构中(在这种情况下可能是数组)并进行操作。
我希望您想要这样的东西:
my @data;
while (<::DBCMD>) {
chomp; # remove the newline
push @data, $_;
}
# And then:
print join(',', @data), "\n";
要打印所需的确切输出,您将需要以下内容:
print '(', join(',', map { qq["$_"] } @data), ")\n";
但是我不得不问...您为什么通过操纵从sqsh
返回的数据来使自己的生活如此艰难?您应该真正看一下Perl的数据库接口库DBI。那将使您的生活变得简单得多。
其他一些提示:
use strict
和use warnings
。并解决它们将揭示的问题。date
。::
不会产生任何效果。只是DBCMD
以相同的方式工作,并且不会造成混淆。