如何在perl中连接oracle的SQLPLUS

如何在perl中连接oracle的SQLPLUS

好像是open (sqlplus,××××)
我不知道后面的具体是怎么样的,最好给个例子,并且实际的SQL语句执行一下,谢谢!
汗, 为什么要open啊

@output = `sqlplus / as sysdba << END
select * from v\$database;
exit
END
`;
谢谢KevinLee39 ,但它提示:“此时不应有 <<”的错误哦
$ cat foo.pl
#! /usr/bin/perl -w
my @output = `sqlplus / as sysdba << END
select * from v\\\$database;
exit
END
`;
print "@output\n";

$ ./foo.pl

SQL*Plus: Release 10.2.0.1.0 - Production on Tue Nov 6 13:58:21 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>
       DBID NAME              CREATED      RESETLOGS_CHANGE# RESETLOGS_TI
---------- ------------------ ------------ ----------------- ------------
PRIOR_RESETLOGS_CHANGE# PRIOR_RESETL LOG_MODE                CHECKPOINT_CHANGE#
----------------------- ------------ ------------------------ ------------------
ARCHIVE_CHANGE# CONTROLFILE_TY CONTROLFILE_ CONTROLFILE_SEQUENCE#
--------------- -------------- ------------ ---------------------
CONTROLFILE_CHANGE# CONTROLFILE_ OPEN_RESETLOGS        VERSION_TIME
------------------- ------------ ---------------------- ------------
.
.
.
.
<<和END之间不要有空格

sqlplus user/passwd@//host:port/SID

如果有tnsnames.ora并export TNS_ADMIN到它所在目录,那么可以
sqlplus user/passwd@SID
奇怪,为什么我的不可以,谢谢各位了。我是在XP环境下装的ActivePerl 5.8.8环境测试的。
不过,我这样是可以的:
if (open (SQLPLUS,"|sqlplus user_test/user_test\@whq"))
{print "ok";}
else
{print "can not invoke sqlplus command\n";}

print SQLPLUS<<ENDOFDAYINPUT;

select * from user_test.shuangseqiu;

ENDOFDAYINPUT


QUOTE:
原帖由 fikong2005 于 2007-11-16 11:31 发表
奇怪,为什么我的不可以,谢谢各位了。我是在XP环境下装的ActivePerl 5.8.8环境测试的。
不过,我这样是可以的:
if (open (SQLPLUS,"|sqlplus user_test/user_test\@whq"))
{print "ok";}
else
{print "c ...

在ActivePerl 5.8.8执行一切正常.

错误提示??
E:\test1>type foo.pl
#! /usr/bin/perl -w
my @output = `sqlplus / as sysdba <<END
select * from v\\\$database;
exit
END
`;
print "@output\n";

E:\test1>perl foo.pl
此时不应有 <<。
把这串放在变量再``就可以.

另外, 这样有很多附加信息, 你可能需要:
SET NEWPAGE 0
SET PAGESIZE 0
SET ECHO OFF
SET FEEDBACK OFF
SET VERIFY OFF
SET HEADING OFF
SET MARKUP HTML OFF SPOOL OFF

如果一行的长度不够导致多行, 那么set linesize xxx 最大是1000000
前不久刚好用到这些...
发表于 2007-11-19 15:54
E:\test1>type foo.pl
#! /usr/bin/perl -w
my @output = `sqlplus / as sysdba <<END
select * from v\\\$database;
exit
END
`;
print "@output\n";

E:\test1>perl foo.pl
此时不应有 <<。


windows 上就会有这种提示。翻起旧帐!!谁解释下啊。谢谢。