|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Maxim 2:5015/157.2 20 Mar 2003 14:19:25 To : All Subject : - Помогите! Какойто Бермудский треугольник!!! --------------------------------------------------------------------------------
Приветствую
У меня какойто шайтан!
есть пакет:
package TDB;
use vars qw(@ISA @EXPORT);
require Exporter;
@ISA='Exporter';
@EXPORT=qw($dbh dbcon dbinsmak);
our $VERSION=1.00;
my $dbh;
use DBI;
use LogFile # функци log_die() отлажен
sub dbcon
{
my $pid=shift;
$dbname='TOPL';
$user='topl';
$pass='pass';
$dbd='Oracle';
$ENV{'ORACLE_HOME'}='/opt/oracle/product/9.0.1';
$ENV{'NLS_LANG'}='RUSSIAN_CIS.CL8KOI8R';
$ENV{'ORACLE_SID'}='PRIMA';
my %attr=(PrintError=>0,RaiseError=>0);
unless(defined($dbh=DBI->connect('PRIMA',$user,$pass,$dbd,{RaiseError=>0,PrintEr
ror=>0})))
{_dberr($pid,0,$DBI::err,$DBI::errstr);log_die($pid,1,1,0,"($DBI::err)
$DBI::errstr\n");}
return $dbh;
}
sub dbinsmak
{
use POSIX 'strftime';
my ($pid,$dbh,$makdate,$ccode,$cfuel,$inpf,$chargef,$restf,$infpr)=@_;
my $year=strftime"%Y",gmtime;
my $query="insert into secinfo
(id_secinfo,makdate,datesys,ccode,cfuel,inpf,chargef,restf,infpr,pid)
values
(seq_secinfo.nextval,to_date('".$makdate.$year."','MM.DD.YYYY'),sysdate,'".$ccod
e."','".$cfuel."','".$inpf."','".$chargef."','".$restf."','".$infpr."','".$pid."
')";
unless(defined($sth=$dbh->do($query)))
{my $err=$dbh->err;
my $str=$dbh->errstr;
unless(defined(my $sth=$dbh->do($sth=$dbh->do(_dberr
($pid,4,$err,$str)))))
{log_die($pid,1,1,3,"(DBERROR) (".$dbh->err().")
".$dbh->errstr()."\n");}
log_die($pid,1,1,5,"(SECINFO) (".$err.") ".$str."\n$query\n");}
}
sub _dberr
{
($pid,$errno,$err,$errstr)=@_;
$str=_clearstr($errstr);
SWITCH: {
$msg=$dtime." (DBI: ".$err.") Ошибка сединения с Oracle
".$errstr."\n",last SWITCH if $errno==0;
$msg=$dtime." (DBI: ".$err.") Ошибка закрытия соединения
".$errstr."\n",last SWITCH if $errno==1;
$msg=$dtime." (DBI: ".$err.") Ошибка закрытия дескриптора комманд
".$errstr."\n",last SWITCH if $errno==2;
$msg=$dtime." (DBI: ".$err.") Ошибка выполнения запроса очистки
таблицы (secinfo)".$errstr."\n",last SWITCH if $errno==3;
$msg=$dtime." (DBI: ".$err.") Ошибка выполнения запроса
(secinfo)".$errstr."\n",last SWITCH if $errno==4;
$msg=$dtime." (DBI: ".$err.") Ошибка выполнения запроса (prbal)
".$errstr."\n",last SWITCH if $errno==5;
$msg=$dtime." (DBI: ".$err.") Ошибка выполнения запроса (tsmtp)
".$errstr."\n",last SWITCH if $errno==6;
$msg=$dtime." (DBI: ".$err.") Ошибка выполнения запроса (dberr)
".$errstr."\n",last SWITCH if $errno==7;
$msg=$dtime." (DBI: ".$err.") Ошибка выполнения запроса (makerr)
".$errstr."\n",last SWITCH if $errno==8;
}
$query="insert into dberr (dbierrcode,dbierrstr,pid,sdate) values
('".$err."','".$msg."','".$pid."',sysdate)";
}
sub _clearstr
{
my $d=shift;
$d=~s/(['"])//g;
return $d;
}
Проблема в следующем функция DBINSMAK заносит данные в oracle .. и в
случае ошибки помимо функций LOG_DIE (логер) .. должно заносится сообщения
об ошибке в Оракл .. Вот .. Функцяи _DBERR генерит SQL-запрос..
Я специально заносил неправильный SQL запрос и отрабатывал занесение
информации об ошибке DBI в базу.. Запись производится вся диагностика
отрабатывает на Ура .. и говорит шо все впорядке HО в Оракле HЕТ HИЧЕГО!!!
я уже полтора дня мудохаюсь не могу понять в чем проблема..
ПОМОГИТЕ ...
дополнительная инфа на мыло или аська 168815113
--- Nizhny Novgorod NNTP-HTTP Gateway
* Origin: http://newsgate.nnov.ru (2:5015/157.2@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/5290663284e2.html, оценка из 5, голосов 10
|