Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 通过DBI获取所有Oracle数据源的列表_Perl_Oracle_Dbi - Fatal编程技术网

Perl 通过DBI获取所有Oracle数据源的列表

Perl 通过DBI获取所有Oracle数据源的列表,perl,oracle,dbi,Perl,Oracle,Dbi,我正在创建一个perl程序,用户除了输入用户名和密码外,还必须输入数据库的名称,程序使用DBI->connect连接到该数据库。我想做的是让程序提供它可以连接到的数据库的名称列表,用户所要做的就是输入用户名和密码,以便于使用。我查看了for数据源,认为这正是我需要的,但当我调用DBI->data\u sources('Oracle')时,它不会返回任何内容(但也不会遇到错误)。我不明白这是怎么发生的,因为如果用户提供数据库名称,程序就能够连接,而不会出现任何故障。是我做错了什么,还是我没有得到什

我正在创建一个perl程序,用户除了输入用户名和密码外,还必须输入数据库的名称,程序使用
DBI->connect
连接到该数据库。我想做的是让程序提供它可以连接到的数据库的名称列表,用户所要做的就是输入用户名和密码,以便于使用。我查看了for数据源,认为这正是我需要的,但当我调用
DBI->data\u sources('Oracle')
时,它不会返回任何内容(但也不会遇到错误)。我不明白这是怎么发生的,因为如果用户提供数据库名称,程序就能够连接,而不会出现任何故障。是我做错了什么,还是我没有得到什么

是的,我意识到我可以手动打开tnsnames.ora文件并解析它。事实上,这是我第一次做的,但我更喜欢使用DBI。

试试这个:

#!/usr/bin/perl -w

use DBI;

my @drivers = DBI->available_drivers();

die "No drivers found!\n" unless @drivers; # should never happen

foreach my $driver ( @drivers ) {
    print "Driver: $driver\n";
    my @dataSources = DBI->data_sources( $driver );
    foreach my $dataSource ( @dataSources ) {
        print "\tData Source is $dataSource\n";
    }
    print "\n";
}

打印了四个内容:dbi::ODBC:dBASE文件、dbi:ODBC:Excel文件、dbi:ODBC:MS Access数据库、dbi:ODBC:Xtreme示例数据库2005您知道是否安装了任何dbi模块吗?我也会试试这个:my$length=@dsns,看看它返回了什么。你刚才把它改成ODBC了吗?您是否正在尝试安装Oracle驱动程序?是的,我删除了我的第一篇文章,因为您的代码与我所做的完全相同,只是我使用了“Oracle”而不是“ODBC”,所以我认为它们是相同的,因为我没有注意到差异我不想安装任何东西;一切都已经就绪,我已经能够连接到Oracle数据库。那么您是否回答了自己的问题?你还需要帮助吗?