Использование Perl для выбора 1 from@db_link, где db_link происходит из каждой записи таблицы поиска

Я хочу прочитать таблицу в Oracle, которая содержит ссылки на базу данных для проверки доступности каждой ссылки на базу данных и вернуть только неверные результаты для каждой ссылки на базу данных и сообщение об ошибке.

Я хочу извлечь эту таблицу поиска в массив и передать записи db_link для выбора из dualQdb_link, проверить все записи поиска, чтобы проверить на успех или неудачу. Это кажется очень трудным для достижения в perl.

Любые идеи?


person Paul    schedule 27.02.2010    source источник


Ответы (1)


Кажется довольно простым, что-то вроде этого:

# Or whatever the column is really named ;)
my $dblinks = $dbh->selectcol_arrayref("select dbname from db_link");

for my $dblink (@$dblinks) {
  my $success = eval {
    my ($ret) = $dbh->selectrow_array("select 1 from "
      . $dbh->quote_identifier($dblink, undef, "dual") );
    $ret;
  };

  if ($success) {
    say "$dblink is up";
  } else {
    say "$dblink is down";
  }
}
person hobbs    schedule 28.02.2010
comment
+1 за quote_identifier(). Для педантизма я думаю, что динамический SQL должен быть: "SELECT 1 FROM " . $dbh->quote_identifer('dual', undef, $dblink). - person pilcrow; 28.02.2010
comment
@pilcrow: На самом деле, у вас это наоборот. Это `$dbh-›quote_identifier('ссылка', 'схема', 'таблица');` так что это будет "SELECT 1 FROM " . $dbh->quote_identifer($dblink, undef, 'dual'). - person cjm; 28.02.2010