PERL:DBI connect('','system',...)失败:ERROR OCIEnvNlsCreate在使用dbi个人软件包时

用户名

我正在尝试使用DBD :: Oracle创建一个应用程序类。我对ORACLE_HOME和ORACLE_SID环境变量有疑问。

当我在BEGIN附件中设置这些变量时,它可以正常工作,请参见示例:

#!/usr/bin/perl
use strict;
use warnings;
use Switch;
use DBI;

# Debug
use Data::Dumper;

package DBIAgent;

BEGIN
{
    $ENV{ORACLE_HOME}="/app/oracle/product/11.2.0/db_1";
    $ENV{ORACLE_SID}="DB01";
}

sub new {
    my $class = shift;
    my $self = {
        _username => shift,
        _password => shift,
        _database => shift,
        _logger => shift
    };

    $self->{_oracleConnected} = 0;

    bless $self, $class;
    return $self;    
}

sub TO_JSON {
  return { %{ shift() } };
}

sub connect {
    my ( $self ) = @_;
    foreach (sort keys %ENV) { 
        $self->{_logger}->log ("INFORMATION - $_  =  $ENV{$_}");
    }

    $self->{_logger}->log ("INFORMATION - Username " . $self->{_username});
    $self->{_logger}->log ("INFORMATION - Password " . $self->{_password});

    eval {
        $self->{_oracleConnexion} = DBI->connect("dbi:Oracle:", $self->{_username}, $self->{_password}, {ora_verbose=>6}) or die ("ERROR - Unable to connect to database " . $self->{_database} . " - " . $! . " SQL ERROR: " . $DBI::errstr);
    };

    if ($@) {
        $self->{_oracleConnected} = 0;
        $self->{_logger}->log ($@);
    } else {
        $self->{_oracleConnected} = 1;
        $self->{_logger}->log ("INFORMATION - Connected to database " . $self->{_database});
    }

    return $self->{_oracleConnected};
}

sub getSqlResult {
    my ( $self, $sqlName, $sqlText ) = @_;
    my $resultSet;

    eval {
        $resultSet = $self->{_oracleConnexion}->selectall_arrayref($sqlText) or die ("ERROR - Execution for sql " . $sqlName . " on database " . $self->{_database} . " failed - SQL ERROR: " . $DBI::errstr);
    };

    if ($@) {
        $self->{_logger}->log ($@);
        return "";
    } else {
        return $resultSet;
    }
}

sub close {
    my ( $self ) = @_;

    $self->{_oracleConnexion}->disconnect();
    $self->{_oracleConnected} = 0;
    $self->{_logger}->log ("INFORMATION - Disconnected from database " . $self->{_connexionInfo}->{database});
}

# Getters / Setters

sub getConnected {
    my( $self ) = @_;
    return $self->{_oracleConnected};
}

1;

删除BEGIN部分时,出现以下错误:DBI connect('','system',...)失败:ERROR OCIEnvNlsCreate

我的Oracle体系结构可能具有多个ORACLE_HOME,因此这就是为什么我想将其作为变量参数。

在创建DBIAgent对象之前,我试图进行设置,但是出现相同的错误。我认为必须在使用DBI之前设置这些变量。命令被调用。

有没有一种方法可以设置BEGIN节的参数,或者有另一种方法可以做到这一点?

谢谢你的帮助。拉加兹

j

您在这里使用了2个环境变量有两个非常不同的目的。


如果要连接到其他Oracle实例,请转储/覆盖ORACLE_SID环境变量,然后使用连接字符串DBD::Oracle->connect来传递SID。文档中的一行显示了此示例:

$dbh = DBI->connect('dbi:Oracle:host=foobar;sid=DB;port=1521', 'scott/tiger', '');

更多详细信息@ https://metacpan.org/pod/DBD::Oracle#connect


ORACLE_HOME另一方面,它指向计算机上安装的Oracle Client软件的位置,并告诉XS组件在DBD::Oracle哪里可以找到链接所需的库。我真的想不出一个很好的理由,想在生产环境中对此变量进行设置。全新安装的事实DBD::Oracle需要针对那些相同的客户端库编译这些XS组件,这很容易使您的尝试变得复杂。奇怪的是您要使用计算机上的最新版本。ORACLE_HOME几乎总是由登录脚本,/ etc / init.d脚本或特定cron作业设置的。

一个例外可能是在测试环境中,但是在那种情况下,您可能会准备好改变环境变量来测试每个候选客户端。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Perl DBI-> connect()中的服务器参数

来自分类Dev

Perl DBI-> connect()中的服务器参数

来自分类Dev

MySQL JDBC与Perl DBI

来自分类Dev

MySQL JDBC与Perl DBI

来自分类Dev

Perl DBI / PostgreSQL min函数

来自分类Dev

perl DBI执行无法识别“?”

来自分类Dev

安装 DBI Perl 模块时出错

来自分类Dev

从文件读取密码时,使用perl dbi获取“拒绝访问”

来自分类Dev

How to represent spaces in Perl's DBI properly

来自分类Dev

Perl类别:: dbi-多个连接

来自分类Dev

Perl + DBI +远程MySQL服务器

来自分类Dev

MySQL多重输出和Perl DBI

来自分类Dev

查找在perl DBI中执行的查询的类型

来自分类Dev

MySQL多重输出和Perl DBI

来自分类Dev

Perl DBI占位符,而不是?s

来自分类Dev

在DBI Perl中清理语句处理程序

来自分类Dev

来自 perl DBI 的 Sybase 警告消息

来自分类Dev

如何在DBI-> connect的参数中使用空格?

来自分类Dev

Perl-使用DBI获取sqlite数据库的结构

来自分类Dev

使用perl的prepare命令不适用于DBI

来自分类Dev

尝试在Perl DBI中使用Oracle MERGE进行增补时收到ORA-01403

来自分类Dev

尝试在Perl DBI中使用Oracle MERGE进行增补时收到ORA-01403

来自分类Dev

使用Perl DBI selectall_hashref时出现错误“属性参数不在哈希引用中”

来自分类Dev

为Perl 5.18.xx安装DBI-mysql

来自分类Dev

无法在Perl中找到DBI.pm模块

来自分类Dev

LIMIT子句中的perl DBI mysql绑定变量

来自分类Dev

如何在Perl的DBI中正确表示空格

来自分类Dev

Perl + DBI + MySQL:如何运行多个查询/语句

来自分类Dev

带有绑定的Perl SQLite DBI SELECT不起作用