Hello, I'm use MaxDB Version: '7.5.00.05 Build 005-121-054-885' Windows 2000
(WIN32)
I have problem, my database crash

I execute my perl script and my database crash


if I execute my perl script once more, I have error message
DBD::ODBC::st execute failed: [SAP AG][SQLOD32 DLL][SAP DB] General
error;-9041 POS(1) System error: BD Index not access
ible. (SQL-HY000)(DBD: st_execute/SQLExecute err=-1) at ./add_result.pl line
48.
executing: err = -1, errstr = [SAP AG][SQLOD32 DLL][SAP DB] General
error;-9041 POS(1) System error: BD Index not access
ible. (SQL-HY000)(DBD: st_execute/SQLExecute err=-1) at ./add_result.pl line
48.

Having tested the procedure, I've found the
reason of crash. If  I comment call LAB.get_reagent4device in
LAB.add_unplanned_test
, the crash is not happening.

my eventlog

Event Type: Error
Event Source: SAPDB:Labtest
Event Category: Fast
Event ID: 18006
Date:  24.12.2003
Time:  12:57:06
User:  NT AUTHORITY\SYSTEM
Computer: UFO
Description:
SAPDB - Labtest :
 - ERROR   TID: 0x4F4  PID: 0x8DC  MsgID: 18006
   EXCEPTION:0xc0000005 Addr:0x5fc1fa ( 0:0x22:0:0 )

Event Type: Error
Event Source: SAPDB:Labtest
Event Category: Fast
Event ID: 18245
Date:  24.12.2003
Time:  12:57:09
User:  NT AUTHORITY\SYSTEM
Computer: UFO
Description:
SAPDB - Labtest :
 - ERROR   TID: 0x4F4  PID: 0x8DC  MsgID: 18245
   Kernel aborts,
   (view diagnostic file: 'knldiag')


my perl script

use English;
use strict;
use subs;

use DBI;

my $dbi = DBI->connect_cached("DBI:ODBC:LABTEST", "lab", "lab") or die
"connecting: $DBI::errstr";


my @sqls =
 (
  "CALL LAB.add_result('Elecsys B Test', '17-24', '003540001072088612294465
', '003540001072088612308465 ', 'SAMPLE', '5',NULL, 'R', 1.54, 0, 'N',
'NORMAL', 'nmol/l', 'F', NULL, NULL, '6070', '0', '4', '2000-06-23
10:07:22.000000', '2000-06-23 10:25:44.000000', NULL, ?)"
  , "CALL LAB.add_result('Elecsys B Test', '8-24', '002516001072088443948702
', '002516001072088443952702 ', 'SAMPLE', '1', NULL, 'R', 100.0, 0, '>',
'NORMAL', 'uIU/ml', 'F', NULL, NULL, '6068', '0', '2', '2000-06-23
10:03:10.000000', '2000-06-23 10:21:32.000000', 'Above measuring range', ?)"
  , "CALL LAB.add_result('Elecsys B Test', '129-24',
'002220001072078735910409 ', '002220001072078735915409 ', 'SAMPLE', '1',
NULL, 'R', 0.106, 0, 'L', 'NORMAL', 'uIU/ml', 'F', NULL, NULL, '6067', '0',
'1', '2000-06-23 10:01:46.000000', '2000-06-23 10:20:08.000000', 'Below
expected value range', ?)"
  , "CALL LAB.add_result('Elecsys B Test', '129-24',
'002220001072078735910409 ', '002220001072078735921409 ', 'SAMPLE', '3',
NULL, 'R', 18.70, 0, 'N', 'NORMAL', 'pmol/l', 'F', NULL, NULL, '6067', '0',
'1', '2000-06-23 10:02:28.000000', '2000-06-23 10:20:50.000000', NULL, ?)"
  , "CALL LAB.add_result('Elecsys B Test', '8-24', '002220001072078746886409
', '002220001072078746890409 ', 'SAMPLE', '1', NULL, 'R', 100.0, 0, '>',
'NORMAL', 'uIU/ml', 'F', NULL, NULL, '6068', '0', '2', '2000-06-23
10:03:10.000000', '2000-06-23 10:21:32.000000', 'Above measuring range', ?)"
  , "CALL LAB.add_result('Elecsys B Test', '8-24', '002144001072080176566240
', '002144001072080176573240 ', 'SAMPLE', '1', NULL, 'R', 100.0, 0, '>',
'NORMAL', 'uIU/ml', 'F', NULL, NULL, '6068', '0', '2', '2000-06-23
10:03:10.000000', '2000-06-23 10:21:32.000000', 'Above measuring range', ?)"
  , "CALL LAB.add_result('Elecsys B Test', '8-24', '002220001072078746886409
', '002220001072078746895409 ', 'SAMPLE', '3', NULL, 'R', 3.64, 0, 'L',
'NORMAL', 'pmol/l', 'F', NULL, NULL, '6068', '0', '2', '2000-06-23
10:03:52.000000', '2000-06-23 10:22:14.000000', 'Below expected value
range', ?)"
  , "CALL LAB.add_result('Elecsys B Test', '10-24',
'002220001072078758189409 ', '002220001072078758199409 ', 'SAMPLE', '3',
NULL, 'R', 10.88, 0, 'L', 'NORMAL', 'pmol/l', 'F', NULL, NULL, '6069', '0',
'3', '2000-06-23 10:05:16.000000', '2000-06-23 10:23:38.000000', 'Below
expected value range', ?)"
 );

foreach my $sql (@sqls)
{
 my $sth = $dbi->prepare($sql)
  or die "preparing: $DBI::errstr";

 my $record = undef;

 $sth->bind_param_inout(1, \$record, 4);

 $sth->execute
  or die "executing: err = $DBI::err, errstr = $DBI::errstr";

 print "record = ",  $record, "\n";

 $sth->finish;

 sleep(1);
}

$dbi->disconnect;



my database

CREATE TABLE LAB.producers
(
 producer_id   VARCHAR(25)   NOT NULL,

 producer_name  VARCHAR(100)  NOT NULL,
 producer_desc  VARCHAR(255)  NULL,


 status    INT     NOT NULL  DEFAULT 0,

 created      timestamp        NOT NULL   DEFAULT TIMESTAMP,
 modified   timestamp        NOT NULL   DEFAULT TIMESTAMP,
 deleted      timestamp        NULL,

 modifier   VARCHAR(32)   NOT NULL   DEFAULT USER,

 PRIMARY KEY(producer_id)
)

///////////////////////////////////////////////////
// create LAB.devicetypes

CREATE TABLE LAB.devicetypes
(
 device_type   VARCHAR(25)   NOT NULL,
 producer_id   VARCHAR(25)   NOT NULL,

 devicetype_name  VARCHAR(100)  NOT NULL,
 devicetype_desc  VARCHAR(255)  NULL,


 status    INT     NOT NULL  DEFAULT 0,

 created      timestamp        NOT NULL   DEFAULT TIMESTAMP,
 modified   timestamp        NOT NULL   DEFAULT TIMESTAMP,
 deleted      timestamp        NULL,

 modifier   VARCHAR(32)   NOT NULL   DEFAULT USER,

 PRIMARY KEY(device_type),

 FOREIGN KEY ref2producers (producer_id)
  REFERENCES LAB.producers (producer_id)
)

///////////////////////////////////////////////////
// LAB.test4devicetype

CREATE TABLE LAB.test4devicetype
(
 device_type   VARCHAR(25)  NOT NULL,
 test_name   VARCHAR(25)  NOT NULL,

 test_code     VARCHAR(25)  NOT NULL,
 test_desc   VARCHAR(99)  NULL,

 PRIMARY KEY(device_type, test_name),

 FOREIGN KEY ref2devicetypes (device_type)
  REFERENCES LAB.devicetypes (device_type)
)

///////////////////////////////////////////////////
// create LAB.devices

CREATE TABLE LAB.devices
(
 device_id   INT          NOT NULL    DEFAULT SERIAL(1),
 device_type   VARCHAR(25)       NOT NULL,

 device_code   VARCHAR(25)   NOT NULL,

 device_serial  VARCHAR(50)   NOT NULL,
 device_desc   VARCHAR(255)  NULL,


 status    INT     NOT NULL  DEFAULT 0,

 created      timestamp        NOT NULL   DEFAULT TIMESTAMP,
 modified   timestamp        NOT NULL   DEFAULT TIMESTAMP,
 deleted      timestamp        NULL,

 modifier   VARCHAR(32)   NOT NULL   DEFAULT USER,

 PRIMARY KEY(device_id),

 FOREIGN KEY ref2type (device_type)
  REFERENCES LAB.devicetypes (device_type),

 CONSTRAINT unique_device_code
  UNIQUE (device_code)
)

//////////////////////////////////////////////////
// proc LAB.add_producer

CREATE DBPROC LAB.add_producer
 ( IN producer_id   VARCHAR(25)
 , IN producer_name  VARCHAR(100)
 , IN producer_desc  VARCHAR(255)
 )

AS

VAR log_msg VARCHAR(255);

BEGIN
 TRY
  insert LAB.producers(producer_id, producer_name, producer_desc)
   values(:producer_id, :producer_name, :producer_desc);

  SET log_msg = 'The producer ''' || producer_name || ''' has been added
successfully, with code = ''' || producer_id || '''';
  call LAB.add_event('info', 'add_producer', 'add_producer', :log_msg);
 CATCH
  STOP($rc, $errmsg);
END;

//////////////////////////////////////////////////
// proc LAB.add_devicetype

CREATE DBPROC LAB.add_devicetype
 ( IN device_type   VARCHAR(25)
 , IN producer_id   VARCHAR(25)
 , IN devicetype_name  VARCHAR(100)
 , IN devicetype_desc  VARCHAR(255)
 )

AS

VAR log_msg VARCHAR(255);

BEGIN
 TRY
  insert LAB.devicetypes(device_type, producer_id, devicetype_name,
devicetype_desc)
   values(:device_type, :producer_id, :devicetype_name, :devicetype_desc);

  SET log_msg = 'The device type ''' || devicetype_name || ''' has been
added successfully, with code = ''' || device_type || '''';
  call LAB.add_event('info', 'add_devicetype', 'add_devicetype', :log_msg);
 CATCH
  STOP($rc, $errmsg);
END;

///////////////////////////////////////////////////
// proc LAB.add_device

CREATE DBPROC LAB.add_device
 ( IN     device_type VARCHAR(25)
 , IN     device_code VARCHAR(25)

 , IN     serial_num  VARCHAR(50)
 , IN     device_desc VARCHAR(255)

 , OUT    device_id  INT
 )
AS

VAR log_msg VARCHAR(255);

BEGIN
 TRY

  INSERT LAB.devices(device_code, device_type, device_serial, device_desc)
   VALUES(:device_code, :device_type, :serial_num, :device_desc);

  SET device_id = LAB.devices.CURRVAL;

  SET log_msg = 'The device ''' || device_code || ''' has been added
successfully, with id = ''' || device_id || '''';
  call LAB.add_event('info', 'add_device', 'add_device', :log_msg);

 CATCH
  STOP($rc, $errmsg);
END;

// data

call LAB.add_producer('ROCHE', 'ROCHE', 'ROCHE')
call LAB.add_devicetype('ELECSYS2010', 'ROCHE', 'Roche, Elecsys 2010',
'Roche, Elecsys 2010')

call LAB.add_device('ELECSYS2010', 'Elecsys A Test', '650-4422-22', 'lab ',
?)
call LAB.add_device('ELECSYS2010', 'Elecsys B Test', '650-4422-22', 'lab ',
?)

insert LAB.test4devicetype (device_type, test_name, test_code, test_desc)
values ('ELECSYS2010', 'IGE', '63', 'IGE')

insert LAB.test4devicetype (device_type, test_name, test_code, test_desc)
values ('ELECSYS2010', 'TSH', '1', 'TSH')

insert LAB.test4devicetype (device_type, test_name, test_code, test_desc)
values ('ELECSYS2010', 'FT4', '3', 'FT4')

insert LAB.test4devicetype (device_type, test_name, test_code, test_desc)
values ('ELECSYS2010', 'PRL', '13', 'PRL')

//



-- 
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to