1

我正在尝试在 UNIX 中创建一个脚本来查询缓存数据库。我可以获得输出,但是如何将输出写入文件>我使用了以下过程:

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

2 回答 2

0

这有点骇人听闻,但以下应该可以工作:

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

您将在 Caché 中输入的每个命令后跟一个“\n”,表示换行。然后将其通过管道传输到新会话中,并将其输出写入文件。

于 2013-05-01T18:35:59.077 回答
0

如果您将它用于报告/网页/等,我会查看 Intersystems 为 Perl、Python、Ruby 等提供的内置模块。这些应该为您提供更清晰的数据库接口。

也就是说,我出于监视目的进行了一些外部调用,这些调用不使用语言 API,因为我试图从数据库(通常是内部)中获取内容。在这些情况下,我使用 Perl。我使用 Perl 是因为这样做我需要解析出菜单和其他我不想要的东西(你不会通过 API 获得)。以下是一个简单示例,查看缓存中存在的所有用户。

#!/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=GBPLhttp://docs.intersystems.com/cache20102 /csp/docbook/DocBook.UI.Page.cls?KEY=GBPY

于 2011-03-27T19:20:58.703 回答