Оболочка Intersystems Cache SQL: Как перенести вывод запроса в файл? - PullRequest
1 голос
/ 24 марта 2011

Я пытаюсь создать скрипт в UNIX для запроса базы данных Cache.Я мог получить вывод, но как мне записать вывод в файл> Я использовал следующую процедуру:

cache << EOF
DO \$SYSTEM.SQL.Shell()
SELECTMODE DISPLAY
SELECT * from .....
GO
EXIT
EOF

Ответы [ 2 ]

0 голосов
/ 01 мая 2013

Это немного хакерски, но должно работать следующее:

echo -e "username\npassword\nDO \$SYSTEM.SQL.Shell()\nfoo\nbar\nH\n" | cache > output

За каждой командой, которую вы вводите в Caché, следует символ "\ n", чтобы указать возврат строки. Затем он передается в новый сеанс, и его вывод записывается в файл.

0 голосов
/ 27 марта 2011

Если вы используете это для отчетов / веб-страниц / и т.д., я бы посмотрел на встроенные модули, которые Intersystems предоставляет для Perl, Python, Ruby и т. Д. Они должны дать вам более чистый интерфейс в базе данных.

Тем не менее, я выполняю некоторые внешние вызовы для целей мониторинга, которые не используют языковой API из-за того, что я пытаюсь получить из базы данных (обычно внутренних).В этих случаях я использую Perl.Я использую Perl, потому что, делая это таким образом, мне нужно разобрать меню и другие вещи, которые мне не нужны (чего вы не получите с API).Ниже приведен простой пример, в котором рассматриваются все пользователи, которые существуют в Cache.

#!/usr/bin/perl

use strict;

my $username = 'user';
my $password = 'password'; 

my $val = `csession $instance -U %SYS << done
$username
$password

d ^SECURITY
1
3
*
*



h
done`;

my @users = split(/\n/, $val);
my $in_users = 0;
my $output = '';
foreach (@users){
     if($in_users){
    chomp($_);
    if($_ eq ''){
        #no longer listing users
        $in_users = 0;
    } else {
            $output .= "$_\n";
        } 
  }
  $in_users = 1 if($_ =~ m/^\-\-\-\-/);  # I started a the user list 
}

print $output; # this prints out to the console

#This prints to a file.
open(OUTFILE, ">outfile.txt");
print OUTFILE $output;

Просмотрите следующие ссылки о Perl и Python API http://docs.intersystems.com/cache20102/csp/docbook/DocBook.UI.Page.cls?KEY=GBPL и http://docs.intersystems.com/cache20102/csp/docbook/DocBook.UI.Page.cls?KEY=GBPY

...