标签: dbd

在编译Perl的DBD :: mysql时如何修复"未找到符号:_is_prefix"?

首先,我想构建DBD :: mysql包.这种情况一直都是失败的,因为无论是什么样的结果都无法加载到测试中Symbol not found: _is_prefix.所以我认为cpan可能有点老了.我知道这是一个随机的假设,但cpan确实告诉我安装最新的Bundle :: CPAN.

谁成功安装了DBD :: mysqlBundle::CPANMac OS X 10.5?你能推荐一些我可以做的不同的事吗?

This is perl, v5.8.8 built for darwin-thread-multi-2level
(with 4 registered patches, see perl -V for more detail)
/usr/local/mysql/bin/mysql  Ver 14.14 Distrib 5.1.36,
for apple-darwin9.5.0 (i386) using readline 5.1

这是DBD :: mysql的CPAN输出日志:

Writing Makefile for DBD::mysql
cc -c  -I/Library/Perl/5.8.8/darwin-thread-multi-2level/auto/DBI -I/usr/local/mysql/include -DDBD_MYSQL_INSERT_ID_IS_GOOD -g  -arch ppc -arch i386 -g -pipe -fno-common -DPERL_DARWIN -no-cpp-precomp -fno-strict-aliasing -Wdeclaration-after-statement -I/usr/local/include -O3 …

mysql macos perl dbd osx-tiger

4
推荐指数
1
解决办法
4375
查看次数

如何使用perl访问具有不同版本(8i和9)的两个Oracle数据库?

我目前正在使用perl模块DBI(1.613)和DBD :: Oracle(1.26)访问Oracle数据库版本9i(9.2.0.8.0).该项目的当前范围现在要求我访问版本8i(8.1.7.4.0)Oracle数据库,并且根据DBD :: Oracle项目,我只能访问具有DBD :: Oracle版本1.20的第二个数据库或下面.

我知道我可以使用DBD版本1.20访问这两个数据库,但我想知道是否可以安装两个版本的DBD模块并为每个数据库使用可接受的版本(不太容易出错).

oracle perl dbi dbd

4
推荐指数
1
解决办法
630
查看次数

基于Sqlite的DBI :: CSV实现

我处理了很多文本文件,以"SQL方式"比较.

DBD::CSV显然是一个很好的选择,因为我可以在文本表上使用SQL语法的强大功能.但是,我处理大量的文本文件,DBD::CSV在性能方面毫无用处.

所以,我开始编写一个将csv文件转换为sqlite DB的模块,然后返回DBI::sqlite我可以使用的对象.问题是,将文本文件转换为sqlite表也可能效率不高,因为我无法从perl运行sqlite命令行来快速加载CSV文件(使用.load).所以我必须Insert into根据文本表创建一个巨大的字符串,并执行它(逐行执行插入在性能方面是非常低效的,所以我更喜欢执行一个大的插入).我愿意避免这种情况,寻找一个使用perl将csv加载到sqlite的单行程序.

另外,我使用以下函数来执行和打印SQL查询:

sub sql_command {
my ($self,$str) = @_;
my $s = $self->{_db}->prepare($str) or die $!;
$s->execute() or die $!;
my $table;
push @$table, [ map { defined $_ ? $_ : "undef" } @{$s->{'NAME'}}];
while(my $row = $s->fetch) {
    push @$table, [ map{ defined $_ ? $_ : "undef" }@$row ];
}
box_format($table);
return box_format($table);;
}


sub box_format {
my $table = shift;
my $n_cols = scalar @{$table->[0]}; …
Run Code Online (Sandbox Code Playgroud)

sqlite perl dbd

4
推荐指数
1
解决办法
1871
查看次数

为什么Perl DBI转义从MySQL检索的值?

我在MySQL中有一个包含撇号()和省略号(...)的值:

$ /bin/echo "select alias from url_alias where source = 'node/12024'" | \
  mysql --skip-column-names -D cat36ia_d7prod
Run Code Online (Sandbox Code Playgroud)

输出:

forum/technical-discussion/nagging-questions-i’ve-been-too-embarrassed-ask…
Run Code Online (Sandbox Code Playgroud)

当我检索用Perl值DBIDBD::mysql,该值已经改变:

$ perl -MDBI -MDBD::mysql -e
      '$dbh=DBI->connect( "DBI:mysql:database=my_db",nick );
       $v=$dbh->selectrow_array(qq|select alias from url_alias where source = "'node/12024'"|);
       print "$v\n";'
Run Code Online (Sandbox Code Playgroud)

输出:

forum/technical-discussion/nagging-questions-i?ve-been-too-embarrassed-ask?
Run Code Online (Sandbox Code Playgroud)

为什么Perl这样做?我可以覆盖它吗?

mysql perl escaping dbi dbd

4
推荐指数
1
解决办法
155
查看次数

如何伪造perl模块的依赖?

我正在使用的外部Perl库有一个我不会在我的应用程序中使用的依赖项(DBD :: mysql)(DBD :: SQLite),所以我希望系统只是假装依赖存在,即使它是假的".

我可以创建一个空的DBD :: mysql.pm模块来编译或者有更简单的方法吗?

perl dependencies perl-module dbd

3
推荐指数
1
解决办法
346
查看次数

Perl - 使用DBD Oracle时出现太多文件错误

有人可以告诉我为什么我在下面的代码中打开文件时出错.错误从25个线程的第9次迭代的大约一半开始,并且是"太多打开文件"错误.该错误仅在线程中运行时发生,并且仅在使用DBI连接/断开连接时发生.这应该不应该影响打开文件数应该是什么呢?我对Perl很新,所以不确定我是否做了一些奇怪的事情.这是在Perl 5.8.8上.在Solaris 10上.

use threads ();
use DBI;
use DBD::Oracle;

my $thrds=25;
my $iter=10;
my @threads;

for (my $j=0; $j<$iter; $j++) {
    &start($j);
}

sub start {
    my $k=$_[0];
    for (my $i=0; $i<$thrds; $i++) {
        $threads[$i] = threads->new(\&RunThread,$k, $i);
    }
    for (my $i=0; $i<$thrds; $i++) { $threads[$i]->join; }
}

sub RunThread {
    my $dbh = DBI->connect("dbi:Oracle:lnrmsd9.world", "rms_reader", "rms_reader") or die "failed connect";
    my ($x, $y)=@_;
    open (my $fh, ">/tmp/da") or die "failed $! at iter $x thread $y";
    close ($fh); …
Run Code Online (Sandbox Code Playgroud)

oracle perl dbd

2
推荐指数
1
解决办法
424
查看次数

使用Ubuntu,如何从CPAN安装DBD :: Sybase?

每当我尝试构建DBD::Sybase连接到MSSQL时,我都会收到错误,

$ sudo cpanp install DBD::Sybase


Installing DBD::Sybase (1.15)
Running [/usr/bin/perl /usr/bin/cpanp-run-perl /home/ecarroll/.cpanplus/5.14.2/build/DBD-Sybase-1.15/Makefile.PL INSTALLDIRS=site]...
Can't find any Sybase libraries in /etc/lib or /etc/lib64 at /home/ecarroll/.cpanplus/5.14.2/build/DBD-Sybase-1.15/Makefile.PL line 155, <IN> line 44.
BEGIN failed--compilation aborted at /usr/bin/cpanp-run-perl line 11, <IN> line 44.
[ERROR] Could not run '/usr/bin/perl Makefile.PL': Can't find any Sybase libraries in /etc/lib or /etc/lib64 at /home/ecarroll/.cpanplus/5.14.2/build/DBD-Sybase-1.15/Makefile.PL line 155, <IN> line 44.
BEGIN failed--compilation aborted at /usr/bin/cpanp-run-perl line 11, <IN> line 44.
 -- cannot continue

[ERROR] Unable to …
Run Code Online (Sandbox Code Playgroud)

sql-server perl sybase dbd freetds

2
推荐指数
2
解决办法
7732
查看次数

无法在 macOS Big Sur 上安装 DBD::Oracle =&gt; 未找到依赖的 dylib '@rpath/libclntsh.dylib.19.1'

我无法在 macOS Big Sur 11.2.1 上构建和安装Oracle Instant Client 19.8。我收到以下错误:

Error:  Can't load '/Users/x/.cpanm/work/1613898291.17798/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle' for module DBD::Oracle: dlopen(/Users/x/.cpanm/work/1613898291.17798/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle, 0x0002): dependent dylib '@rpath/libclntsh.dylib.19.1' not found for '/Users/x/.cpanm/work/1613898291.17798/DBD-Oracle-1.80/blib/arch/auto/DBD/Oracle/Oracle.bundle'. relative file paths not allowed '@rpath/libclntsh.dylib.19.1' at /System/Library/Perl/5.28/darwin-thread-multi-2level/DynaLoader.pm line 197.
Run Code Online (Sandbox Code Playgroud)

Big Sur 似乎没有将DYLD_LIBRARY_PATH环境变量传递给子 shell:

Your DYLD_LIBRARY_PATH env var is set to ''
WARNING: Your DYLD_LIBRARY_PATH env var doesn't include '/opt/instantclient_19_8' but probably needs to.
Run Code Online (Sandbox Code Playgroud)

我努力了:

  • 安装在默认路径~/Downloads/instantclient_19_8
  • 安装在~/lib/usr/local/lib
  • 用绝对路径替换符号链接
  • 使用install_name_tool修改id并更改@rpath但得到warning: changes …

oracle macos perl dbi dbd

2
推荐指数
1
解决办法
901
查看次数

如何使用 DBD::mysql 检查 MySQL 服务是否正在运行

我正在使用以下 DBD::mysql 语句连接到 MySQL 数据库:

use DBI;
 
# Connect to the database.
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost",
                       "usr", "usr's password",
                       {'RaiseError' => 1});
Run Code Online (Sandbox Code Playgroud)

在尝试连接数据库之前,有没有办法检查 MySQL 服务是否正在运行?如果数据库运行在远程服务器上怎么办?

mysql perl dbd

2
推荐指数
1
解决办法
122
查看次数

BEGIN块中LD_LIBRARY_PATH的初始化失败

我必须将/oracle/v10.2.0/lib添加到LD_LIBRARY_PATH以使用DBI模块连接到Oracle.

如果我在执行perl脚本之前在shell中设置LD_LIBRARY_PATH,一切正常.

但它不适用于脚本:

BEGIN {
  $ENV{'LD_LIBRARY_PATH'}='/oracle/v10.2.0/lib';
}
use DBI;
Run Code Online (Sandbox Code Playgroud)

当我执行脚本时,我收到错误:

install_driver(Oracle)失败:无法为模块DBD :: Oracle加载'/usr/apps/perl5/site_perl/5.8.8/i686-linux/auto/DBD/Oracle/Oracle.so':libclntsh.so.10.1 :无法打开共享对象文件:/usr/apps/perl5/5.8.8/i686-linux/DynaLoader.pm第230行没有这样的文件或目录.在(eval 3)第3行编译在(eval 3)的require中失败第3行.也许未安装在/var/tmp/getTraceDB.pl第23行所需的共享库或dll

oracle perl dbi dbd

1
推荐指数
1
解决办法
2474
查看次数

标签 统计

dbd ×10

perl ×10

dbi ×4

oracle ×4

mysql ×3

macos ×2

dependencies ×1

escaping ×1

freetds ×1

osx-tiger ×1

perl-module ×1

sql-server ×1

sqlite ×1

sybase ×1