По сути, я бы хотел open
передать в sqlplus канал, используя Perl, отправив запрос и получив обратно информацию из запроса.
Текущий код:
open(PIPE, '-|', "sqlplus user/password@server_details");
while (<PIPE>) {
print $_;
}
Это позволяет мне перейти в sqlplus и выполнить мой запрос.
Что мне трудно понять, так это как Perl отправляет sqlplus запрос (поскольку это всегда один и тот же запрос), и как только это будет сделано, как я могу получить информацию, записанную обратно в переменную в моем скрипте Perl?
PS - я знаю о DBI
... но я хотел бы знать, как это сделать, используя вышеописанный метод, такой же неэлегичный, как и он:)
<ч />
Внесены некоторые изменения в код, и теперь я могу отправить свой запрос в sqlplus, но он отключает ... и я не знаю, как получить от него результаты.
my $squery = "select column from table where rownum <= 10;"
# Open pipe to sqlplus, connect to server...
open(PIPE, '|-', "sqlplus user/password@server_details") or die "I cannot fork: $!";
# Print the query to PIPE?
print PIPE $squery;
Это был бы случай получения STDOUT
из sqlplus и последующего его хранения с использованием сценария Perl (родительского)?
Я бы хотел сохранить его в массиве для последующего анализа, в основном.
Блок-схема:
Perl-скрипт (родительский) -> открыть канал в sqlplus (дочерний) -> напечатать запрос по каналу -> sqlplus выводит результаты на экран (STDOUT?) -> прочитать STDOUT в массив в скрипте Perl (родительский)
<ч />
Редактировать : Может случиться так, что разветвление процесса в sqlplus может быть нежизнеспособным при использовании этого метода, и я должен будет использовать DBI. Просто жду, когда кто-нибудь ответит ...