Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Зависает Perl-скрипт при запросе данных из Oracle / 2 сообщений из 2, страница 1 из 1
14.05.2014, 14:40
    #38641051
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает Perl-скрипт при запросе данных из Oracle
Есть скрипт на Perl с таким кодом:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
	# Connect to Bill-Master
	{
		$meta->{'billing'}->{'dbh'} = undef;
		$ENV{'NLS_LANG'} = 'RUSSIAN_CIS.UTF8';
		my $dbh = DBI->connect($meta->{'billing'}->{'link'}, $meta->{'billing'}->{'user'}, $meta->{'billing'}->{'pass'}, {RaiseError=>0, PrintError=>1, AutoCommit=>0} );
		$dbh->do("ALTER SESSION SET NLS_NUMERIC_CHARACTERS = '. '");
		$dbh->do("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD'");
		$dbh->do("ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH:MI:SS'");
		$meta->{'billing'}->{'dbh'} = $dbh;
	}
	# Connect to UserSide
	{
		$meta->{'userside'}->{'dbh'} = undef;
		my $dbh = DBI->connect($meta->{'userside'}->{'link'}, $meta->{'userside'}->{'user'}, $meta->{'userside'}->{'pass'}, {RaiseError=>0, PrintError=>1, AutoCommit=>0} );
		$dbh->{'mysql_enable_utf8'} = 1;
		$dbh->do("set NAMES utf8");
		#$dbh->do("set character set cp1251");
		$meta->{'userside'}->{'dbh'} = $dbh;
	}
...
sub sqlcmd($$$;$)
{
	my $dbh = shift;
	my $cmd = shift||'';
	my $sql = shift||'';
	my $params = shift;
	return undef unless (grep {$cmd eq $_} qw(check execute fetch list));
	$sql = $meta->{'sql'}->{$sql} if (exists($meta->{'sql'}->{$sql}));
	my $q = $dbh->prepare($sql);
	if ($params && ref($params) eq 'HASH')
	{
		$q->bind_param(":$_", $params->{$_}) foreach keys(%{$params});
	}
	if ($params && ref($params) eq 'ARRAY')
	{
		$q->bind_param($_+1, $params->[$_]) foreach (0..$#$params);
	}
	my $ret = $q->execute() or return undef;
	if ($cmd eq 'check')
	{
		my ($exist) = $q->fetchrow_array;
		return ($exist ? 1 : 0);
	}
	elsif ($cmd eq 'execute')
	{
		return $ret;
	}
	elsif ($cmd eq 'fetch')
	{
		my @rows = ();
		while ( my $row = $q->fetchrow_hashref )
		{
			push @rows, $row;
		}
		return \@rows;
	}
	elsif ($cmd eq 'list')
	{
		my @rows = ();
		while ( my ($value) = $q->fetchrow_array )
		{
			push @rows, $value;
		}
		return \@rows;
	}
}



С БД MySQL процедура sqlcmd работает нормально.
Но с БД Oracle скрипт почему-то зависает, загружая CPU на 100%.
Зависает на строчке my $ret = $q->execute().
Но дело скорее всего не с процедуре, потому что он зависает, даже если такую строку выполнить:
Код: php
1.
print Dumper($meta->{'billing'}->{'dbh'}->selectall_hashref("select * from dual"))



Подскажите, с чем это может быть связано?
________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
14.05.2014, 14:45
    #38641063
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зависает Perl-скрипт при запросе данных из Oracle
Разобрался уже, я ошибся.
Я по ошибке для коннекта к Oracle вызывал некорректный запрос (предназначенный для коннекта к MySQL).
Но почему-то ошибки при этом не было, хотя я и пробовал выставлять RaiseError=>1.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Зависает Perl-скрипт при запросе данных из Oracle / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]