【问题标题】:How can I use a database server from a Perl CGI script?如何通过 Perl CGI 脚本使用数据库服务器?
【发布时间】:2008-11-19 06:16:09
【问题描述】:

我的程序已经可以工作了,我有 Perl(GUI 窗口),我可以在其中输入数据,将数据传递到网页(使用 Tomcat 服务器,JSP),然后将其保存到 oracle 数据库。我想要的是使用 Perl CGI 制作从 Oracle 数据库中检索/提取数据的搜索参数 (webapp)。可能吗?或者有什么建议可以解决我的程序?谢谢!:-)

【问题讨论】:

  • 认为问题应该更改(返回)为使用 Oracle,因为答案是针对它的。

标签: database perl cgi


【解决方案1】:

是的,您可以使用 DBIDBD::Oracle 模块。

但是,Oracle 存在一些问题。我记得 Oracle 8 的一些有趣和游戏,因此这些可能不再适用,但在某些情况下确实需要设置 ENV 变量,如 ORACLE_HOME、ORACLE_BASE 和 ORACLE_SID。

DBD::Oracle 文档确实对此进行了说明,并且还提到了另一个 ENV 变量 TWO_TASK。所以让它工作可能取决于....

  • 您运行的是什么版本的 Oracle
  • 您是否有监听器(我认为您确实需要像 CGI 一样进行网络访问?)
  • 您使用的是什么版本的 SQL*Net。

似乎令人生畏,但您可能需要的只是在网络服务器中添加这些 ENV 变量(我当时使用的是 iPlanet)。或者来自它提供的 DBD::Oracle 文档...

BEGIN {
  $ENV{ORACLE_HOME} = '/home/oracle/product/10.x.x';
  $ENV{TWO_TASK}    = 'DB';
}
$dbh = DBI->connect('dbi:Oracle:','scott', 'tiger');
#  - or -
$dbh = DBI->connect('dbi:Oracle:','scott/tiger');

PS。以上假设您在与 Oracle 相同的服务器上运行 CGI 脚本!如果不是,那么那些 ENV 变量是多余的,您可以这样做(从我的旧脚本中提取!)...

my $db = DBI->connect("dbi:Oracle:host=$host;sid=$database", $user, $pass, 
  { RaiseError => 0, PrintError => 0 } )
  or croak( "Unable to connect to DB - $DBI::errstr" );

但是我确实记得必须在 Oracle 服务器上调整诸如 TNLISTENER.CONF 之类的东西(这是几年前的事了,所以我有点记不住!)而且我很确定你需要下载一些客户端 Oracle 库(你可以从他们的网站获取)。

【讨论】:

  • 我使用 Tomcat 版本 4.1.31、Netbeans 6.1、Oracle 10g 和 SQL*Plus 10.2.0.1 配置我的程序。实际上我的系统中没有安装 DBI,所以我更喜欢使用该设置。我想我必须尝试 DBI?谢谢!:-) 它提供了很多想法。
  • 输入 "perldoc DBI" & "perldoc DBD::Oracle" 看看你是否安装了它们。您通常使用“cpan”命令安装这些。安装 DBD::Oracle 时最好事先正确设置 ENV 变量。
  • 如果您使用的是 Windows,请查看此文档...search.cpan.org/src/PYTHIAN/DBD-Oracle-1.22/README.win32.txt
  • 如果你已经在使用 JDBC 那么你也可以考虑 DBI & DBD::JDBC search.cpan.org/dist/DBD-JDBC
【解决方案2】:

混合技术的任何具体原因?为什么不使用 servlet/JSP?

如果您必须使用 Perl,那么您需要选择运行您的 Perl 脚本的网络服务器。

通常,这将是使用 mod_perl 的 Apache。

但如果您只打算将它用于一些管理脚本,那么您可以按照here 的概述从 tomcat 运行 Perl。

一旦您成功运行了一个简单的 perl 脚本,那么我会考虑使用 DBI/DBD::Oracle 访问您的数据库吗?

希望这会有所帮助...

【讨论】:

  • 如果没有安装 DBI 怎么办?不建议在生产线上使用它,因为它会导致生产速度变慢,因为我们直接到控制器(例如时间,挂断)。感谢您提供的答案和参考。它让我知道如何使用它:-)。
猜你喜欢
  • 2014-03-27
  • 2018-01-09
  • 1970-01-01
  • 2012-03-10
  • 2017-12-23
  • 2010-12-16
  • 2012-05-31
  • 2013-06-05
相关资源
最近更新 更多