powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Зависает Perl-скрипт при запросе данных из Oracle
2 сообщений из 2, страница 1 из 1
Зависает Perl-скрипт при запросе данных из Oracle
    #38641051
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть скрипт на 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
Зависает Perl-скрипт при запросе данных из Oracle
    #38641063
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался уже, я ошибся.
Я по ошибке для коннекта к Oracle вызывал некорректный запрос (предназначенный для коннекта к MySQL).
Но почему-то ошибки при этом не было, хотя я и пробовал выставлять RaiseError=>1.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Зависает Perl-скрипт при запросе данных из Oracle
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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