我正在尝试在UNIX中创建一个脚本来查询Cache数据库。我可以得到输出但是如何将输出写入文件> 我使用了以下程序:
cache << EOF
DO \$SYSTEM.SQL.Shell()
SELECTMODE DISPLAY
SELECT * from .....
GO
EXIT
EOF
答案 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=GBPL 和 http://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”以表示换行。然后将其传送到新会话,并将其输出写入文件。