Intersystems Cache SQL shell:如何将查询输出假脱机到文件?

时间:2011-03-24 19:15:04

标签: intersystems-cache

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

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

2 个答案:

答案 0 :(得分:0)

如果你将它用于报告/网页/等,我会看看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=GBPLhttp://docs.intersystems.com/cache20102/csp/docbook/DocBook.UI.Page.cls?KEY=GBPY

答案 1 :(得分:0)

这有点hackish,但以下应该有效:

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

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