免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7233 | 回复: 9
打印 上一主题 下一主题

如何在perl中连接oracle的SQLPLUS [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-11-05 16:05 |只看该作者 |倒序浏览
好像是open (sqlplus,××××)
我不知道后面的具体是怎么样的,最好给个例子,并且实际的SQL语句执行一下,谢谢!

论坛徽章:
0
2 [报告]
发表于 2007-11-06 00:49 |只看该作者
汗, 为什么要open啊

@output = `sqlplus / as sysdba << END
select * from v\$database;
exit
END
`;

论坛徽章:
0
3 [报告]
发表于 2007-11-06 13:06 |只看该作者
谢谢KevinLee39 ,但它提示:“此时不应有 <<”的错误哦

论坛徽章:
0
4 [报告]
发表于 2007-11-06 16:47 |只看该作者
$ 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
------------------- ------------ ---------------------- ------------
.
.
.
.

论坛徽章:
0
5 [报告]
发表于 2007-11-06 16:55 |只看该作者
<<和END之间不要有空格

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

如果有tnsnames.ora并export TNS_ADMIN到它所在目录,那么可以
sqlplus user/passwd@SID

论坛徽章:
0
6 [报告]
发表于 2007-11-16 11:31 |只看该作者
奇怪,为什么我的不可以,谢谢各位了。我是在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

论坛徽章:
0
7 [报告]
发表于 2007-11-16 11:40 |只看该作者
原帖由 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执行一切正常.

错误提示??

论坛徽章:
0
8 [报告]
发表于 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
此时不应有 <<。

论坛徽章:
0
9 [报告]
发表于 2007-11-19 16:20 |只看该作者
把这串放在变量再``就可以.

另外, 这样有很多附加信息, 你可能需要:
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
前不久刚好用到这些...

论坛徽章:
0
10 [报告]
发表于 2008-12-09 13:54 |只看该作者
发表于 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 上就会有这种提示。翻起旧帐!!谁解释下啊。谢谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP