Добрый день.
Нужна помощь, по работе с БД Oracle 10 из PERl. Делаю выборку из БД oracle средствами perl. Запрос следующий:
| Код | select "OPERATOR", count("NUMBER") as count, REGEXP_REPLACE(dbms_lob.substr(a."DESCRIPTION",100,1),'(Reassignment from) (.*) to','\2',1,1,'m') as komanda from activitym1 a where sysmodtime between TO_DATE('01.01.2010 00:00','DD.MM.YYYY hh24:mi')-substr(sessiontimezone,3,1)/24 and TO_DATE('04.05.2010 23:59','DD.MM.YYYY hh24:mi')-substr(sessiontimezone,3,1)/24 group by "OPERATOR", REGEXP_REPLACE(dbms_lob.substr(a."DESCRIPTION",100,1),'(Reassignment from) (.*) to','\2',1,1,'m')
|
В результате поле komanda вместо названий на русском языке выдаёт квадратик. Причём сама выборка из perl делается не корректно, т.е. он фактически делает группировку по этому КВАДРАТИКУ(он во всех полях одинаковым получается).
Вероятно проблема в переменных клиента, но в каких, понять не могу.
При этом, в девелопере этот запрос отрабатывает корректно. Если не использовать REGEXP_REPLACE, то проблем нет. Русские символы отображаются корректно.
Кусок кода отвечающий за выборку:
| Код | #!/usr/bin/perl use DBI;
#Объявляем переменные my $user='123'; my $password='123';
#Конект к БД my $source="dbi:Oracle:host=12.34.56.123;sid=SIDDB;port=1521"; my $dbh=DBI->connect($source,$user,$password,{PrintError=>0,AutoCommit=>0,RaiseError=>1) or die "Couldnot connect to Oracle:$DBI::errstr\n"; $dbh->do("ALTER SESSION SET NLS_DATE_FORMAT='DD-MM-YY HH24:MI'");
sub get_data { my ($start, $end)=@_; my @out, %TMP;
my $sql=qq(select "OPERATOR", count("NUMBER") as count, REGEXP_REPLACE(dbms_lob.substr(a."DESCRIPTION",100,1),'(Reassignment from) (.*) to','\2',1,1,'m') as komanda from activitym1 a where sysmodtime between TO_DATE('01.01.2010 00:00','DD.MM.YYYY hh24:mi')-substr(sessiontimezone,3,1)/24 and TO_DATE('04.05.2010 23:59','DD.MM.YYYY hh24:mi')-substr(sessiontimezone,3,1)/24 group by "OPERATOR", REGEXP_REPLACE(dbms_lob.substr(a."DESCRIPTION",100,1),'(Reassignment from) (.*) to','\2',1,1,'m') ); my $sql_request=$dbh->prepare($sql); my $result=$sql_request->execute || die "Error while to execute the $sql"; while(my %RESULT=%{$sql_request->fetchrow_hashref}) { push @out,\%RESULT; #DEBUG)) print "$RESULT{DE} $RESULT{OPERATOR} $RESULT{COUNT}<br>\n"; } return @out; }
|
|