Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何创建循环以将完成的文件发送到不同的目录(已关闭)_Mysql_Perl_Dbi - Fatal编程技术网

Mysql 如何创建循环以将完成的文件发送到不同的目录(已关闭)

Mysql 如何创建循环以将完成的文件发送到不同的目录(已关闭),mysql,perl,dbi,Mysql,Perl,Dbi,因此,我创建了一个脚本,它将在其中为每个文件在表“Top”中执行一个insert语句。因此,我现在面临的问题是如何创建一个脚本,将完成的(已经成功地将数据插入表中的)文件发送到一个目录 我只展示了重要的一句话:U 我还是新手,所以请容忍我的愚蠢 #!/usr/bin/perl use warnings; use DBI; use strict; use autodie; use Data::Dumper; our $DIR="/home/aimanhalim/LOG"; our $F

因此,我创建了一个脚本,它将在其中为每个文件在表“Top”中执行一个insert语句。因此,我现在面临的问题是如何创建一个脚本,将完成的(已经成功地将数据插入表中的)文件发送到一个目录

我只展示了重要的一句话:U

我还是新手,所以请容忍我的愚蠢

#!/usr/bin/perl
use warnings;
use DBI;    
use strict;
use autodie;
use Data::Dumper;


our $DIR="/home/aimanhalim/LOG";
our $FILENAME_REGEX = "server_performance_";
# mariaDB config hash
our %db_config = ( "username"=>"root", "password"=> "", "db"=>"Top_Data", "ip" => "127.0.0.1", "port" => "3306");
main();

exit;

..............................................................................
 my ($result) = insert_record($dataRef,\%db_config);

      #
      # close file
      close($file_hndlr);
      #
      # move file to DONE dir
      #
      # continue until file completed
      last;
   }

..............................................................................

sub insert_record(){

 my($data,$db_config)=@_;
 my $result = -1; # -1 fail;  0 - succ

  # connect to db
  # connect to MySQL database
  my $dsn = "DBI:mysql:database=".$db_config->{'db'}.";host=".$db_config->{'ip'}.";port=".$db_config->{'port'};
my $username = $db_config->{'username'};
my $password = $db_config->{'password'};

my %attr = (PrintError=>0,RaiseError=>1 );
my $dbh = DBI->connect($dsn,$username,$password,\%attr) or die $DBI::errstr;

print "We Have Successfully Connected To The Database \n";

..............................................................................

  # execute insert
  my $sql = 'insert into Top(Load_Average, CPU_User, CPU_ID, CPU_System, CPU_Waiting, Memory_Total, Memory_Used, Swap_Total, Swap_Available) values(?,?,?,?,?,?,?,?,?)';

  my @param_bind = (); 

  my $stmt =$dbh->prepare($sql) or die "Its A Fail" . $dbh->errstr();
  $param_bind[0] = $data->{'Average_Load'}->{'List_1'};
  $param_bind[1] = $data->{'Cpu_List'}->{'User'};
  $param_bind[2] = $data->{'Cpu_List'}->{'ID'};
  $param_bind[3] = $data->{'Cpu_List'}->{'System'};
  $param_bind[4] = $data->{'Cpu_List'}->{'Waiting'};
  $param_bind[5] = $data->{'Memory_List'}->{'Total'};
  $param_bind[6] = $data->{'Memory_List'}->{'Used'};
  $param_bind[7] = $data->{'Swap_List'}->{'Total'};
  $param_bind[8] = $data->{'Swap_List'}->{'Available'};
  $stmt->execute(@param_bind);

  $stmt->finish();
    print "The Data Has Been Inserted Successfully\n";
  $result = 0;
  return($result);


  # commit
  $dbh->commit();
  # return succ / if fail rollback and return fail
  $dbh->disconnect();


}



exit;

当移动失败时,您也可以选择立即中止程序,只需替换为

循环是
while
循环,如中所示

我只是展示了重要的一行

事实上,我认为你已经向我们展示了不重要的台词。你已经向我们展示了你知道怎么做的部分,而不是你遇到麻烦的部分

我现在遇到的问题是如何创建一个脚本,将已完成的(已成功将数据插入表中的)文件发送到一个目录


您没有向我们显示任何处理文件的代码。我假设您正在打开一个文件并使用其内容填充
$dataRef
变量。一旦你处理完这些数据,你就可以用它来移动你的文件。

这个问题系列的前几篇文章:通常我不会指出它们,因为它们在帐户历史记录中很明显,但这里涉及到一个帐户切换。如果你愿意,帐户可以合并:那是这样的:我在问如何在脚本插入MySQL之后移动文件…我的坏问题我觉得这是脚本中最重要的问题抱歉再次。。。我使用了“移动”,但每次执行只移动一个文件。@mitekyle:每次执行只移动一个文件是的,这就是它的工作原理。但为什么这是一个问题?完成后只需移动每个文件。但我的讲师希望它只执行一次,直到所有文件都在目录中完成。我尝试过,但每次执行只移动一个文件
use File::Copy qw(move);
⋮
move($entry, $DONE_directory) or
    warn "Could not move file '$entry' into '$DONE_directory': $!";