我是这个网站的新手,也是sql语言的新手,我不知道我想要的是“可能”,但这是我需要做的。
我有一个script.pl,当你像这样执行它时需要一个参数 => ./script.pl -a 102312其中“102312”是参数
使用sql请求,我从数据库中的表中获取一列,它给出了这些参数的列表 => 102312/102312/212312 / ...等
我需要为我的请求的每个结果执行命令“./script.pl -a”参数'“
我不知道它是否清楚,我不是英语,所以很抱歉
提前感谢您的帮助 小心
编辑: 嗨,再次,
我试过这个,它几乎正常工作,我在这里得到了我的.sh脚本:
#!/bin/bash
result=$(sqlplus ${USER}/${PWD}@${mydb}<< EOF
@script.sql)
echo $result
唯一的问题是,当我打印我的变量时,在查询的实际结果之前,我得到以下文本“连接到: Oracle Database 11g企业版11.2.0.4.0版 - 64位生产 使用...测试选项SQL&gt; “,然后查询结果如102312 102312 212312,然后再次”与Oracle Database 11g企业版11.2.0.4.0断开连接 - 使用分区和实际应用程序测试选项进行64位生产“ 我可以摆脱这个文本,只得到查询的结果?,以便我可以使用这些作为我的perl脚本的参数。
再次感谢您的关注
编辑2:我发现我需要在我的sqlplus请求中添加“-s”arg,现在一切正常,感谢您的帮助再次看到你
答案 0 :(得分:1)
您似乎想要为从SQL查询返回的每个参数执行脚本。没有看到任何你的Perl脚本或你的SQL查询使这种难以回答,但我建议你稍微改变一下如何思考这个问题。而不是执行SQL查询,以某种方式以文本形式获取结果,然后运行您的脚本N次(其中N是SQL查询中返回的参数数量)。你可以:
这可能看起来像这样:
#!/usr/bin/env perl
use strict;
use warnings;
use DBI;
my $dbh = DBI->connect(
$dsn, $user, $password, { RaiseError => 1, AutoCommit => 0 }
);
my $sth = $dbh->prepare(
"select arguments from table where <some-condition> = ?"
);
$sth->execute( <condition> );
while ( my $row = $sth->fetchrow_arrayref ) {
# execute action on row
}
答案 1 :(得分:0)
编辑: 根据您的评论,我认为您只需要在.sh脚本中使用for循环。首先,您要分配查询结果,然后使用for循环为结果变量中的每个参数调用.pl脚本。
for ARG in $RESULTS
do
perl /path/to/script.pl $ARG
done
我不太熟悉bash脚本,所以代码可能不太正确,但方法应该是合理的。
原始答案:
如果您是查询脚本并且script.pl必须是独立的,但它们都是Perl脚本,您可以让查询脚本使用system()为您运行script.pl。 假设您的参数由/分隔,您可以在查询脚本中执行类似的操作:
#!/usr/bin/perl
#query code to get arguments
$arguments =~ s/\// /;
system ("perl /path/to/script.pl $arguments") or die ("Something went wrong: $?\n");
然后在script.pl中你可以循环遍历@_:
#!/usr/bin/perl
for my $arg (@_)
{
#script.pl code
}
以下是使用system的perldoc链接。虽然如果一切都是内部的,我只会推荐这种方法。