Hello, I'm use MaxDB Version: '7.5.00.05 Build 005-121-054-885' Windows 2000
(WIN32)
I have problem, my database crash
SAPDB - Test :
- ERROR TID: 0x2CC PID: 0x90C MsgID: 18006
EXCEPTION:0xc0000005 Addr:0x6a9b2d ( 0x1:0xa35c3f75:0:0 )
I call dbprocedure DBA.add_usergroup and maxdb crash
if I comment call call DBA.add_event , procedure work correctly
/*
SET log_msg = 'msg';
call DBA.add_event('info', 'add_usergroup', 'DBA.add_usergroup', :log_msg);
*/
my database
CREATE TABLE DBA.lab_users
(
userid INT NOT NULL DEFAULT SERIAL(1),
parent INT NOT NULL,
flag VARCHAR(1) NOT NULL,
userlogin VARCHAR(32) NOT NULL,
username VARCHAR(50) NOT 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(userid),
CONSTRAINT flag IN ('G', 'U'),
CONSTRAINT unique_username
UNIQUE (username),
CONSTRAINT unique_userlogin
UNIQUE (userlogin)
)
insert DBA.lab_users (parent, flag, username, userlogin)
values (0, 'G', 'Users of laboratory', 'r_laboratoryusers')
create role r_laboratoryusers
CREATE DBPROC DBA.add_usergroup
( IN rolename VARCHAR(32)
, IN groupname VARCHAR(50)
, IN parent INT
, OUT group_id INT
)
AS
VAR parentrole VARCHAR(32); sql_cmd VARCHAR(255); log_msg VARCHAR (255);
SET parentrole = '';
SET sql_cmd = '';
SET log_msg = '';
BEGIN
TRY
select userlogin from DBA.lab_users
where userid = :parent;
FETCH INTO :parentrole;
CATCH
IF $rc = 100 THEN STOP(5001, 'invalid argument parent ''' || parent || '''
not found')
ELSE STOP($rc, $errmsg);
TRY
select *
from DBA.lab_users
where username = :groupname and status = 0;
IF $rc = 0 THEN STOP(5002, 'invalid argument: group name ''' || groupname ||
''' already exists in system');
CATCH
IF $rc <> 100 THEN STOP($rc, $errmsg);
TRY
select * from DOMAIN.ROLES
where role = UPPER(:rolename);
IF $rc = 0 THEN STOP(5003, 'invalid argument: role name ''' || rolename ||
''' already exists in database');
CATCH
IF $rc <> 100 THEN STOP($rc, $errmsg);
TRY
SET sql_cmd = 'create role ' || rolename;
execute sql_cmd;
CATCH
STOP($rc, $errmsg);
TRY
SET sql_cmd = 'grant ' || parentrole || ' to ' || rolename;
execute sql_cmd;
CATCH
STOP($rc, $errmsg);
TRY
SET sql_cmd = 'insert into DBA.lab_users (parent, flag, username, userlogin)
values (' || parent || ' , ''G'' , ''' || groupname || ''' , ''' || rolename
|| ''')';
execute sql_cmd;
SET group_id = DBA.lab_users.CURRVAL;
/*
SET log_msg = 'The user group ''' || groupname || ''' for role ''' ||
rolename || ''' parent ''' || parent || ''' with group_id ''' || group_id ||
''' has been added successfully.';
*/
SET log_msg = 'msg';
call DBA.add_event('info', 'add_usergroup', 'DBA.add_usergroup', :log_msg);
CATCH
STOP($rc, $errmsg);
END;
CREATE TABLE DBA.eventlog
(
id INT NOT NULL DEFAULT SERIAL(1),
record_time timestamp NOT NULL DEFAULT TIMESTAMP,
source VARCHAR(50) NOT NULL,
type VARCHAR(10) NOT NULL,
event VARCHAR(25) NOT NULL,
event_user VARCHAR(50) NOT NULL DEFAULT 'N/A',
computer VARCHAR(50) NOT NULL DEFAULT 'N/A',
event_time timestamp NULL,
comment VARCHAR(2000) NULL,
raw_data LONG NULL,
PRIMARY KEY(id),
CONSTRAINT type IN ('info','warning','error'),
FOREIGN KEY ref2event (event)
REFERENCES DBA.events (event)
)
///////////////////////////////////////////////////
// TABLE DBA.events
CREATE TABLE DBA.events
(
event VARCHAR(25) NOT NULL,
event_name VARCHAR(100) NOT NULL,
event_desc VARCHAR(255) NULL,
audit INT NOT NULL DEFAULT 1,
PRIMARY KEY(event) ,
CONSTRAINT unique_event_name
UNIQUE (event_name)
)
insert DBA.events (event, event_name, event_desc)
values ('add_usergroup' , 'add user group in system', 'add user group in
system')
insert DBA.events (event, event_name, event_desc)
values ('drop_usergroup' , 'remove user group from system', 'remove user
group from system')
CREATE DBPROC DBA.add_event
( IN type VARCHAR(10)
, IN event VARCHAR(25)
, IN source VARCHAR(50)
, IN comment VARCHAR(2000)
)
AS
VAR node VARCHAR(50);
SET node = 'N/A';
BEGIN
TRY
SELECT APPLNODEID
FROM SYSDBA.TRANSACTIONS T, DOMAIN.CONNECTPARAMETERS C
WHERE T.SESSION = C.SESSION;
FETCH INTO :node;
CATCH
IF $rc <> 100 THEN STOP($rc, $errmsg);
TRY
INSERT DBA.eventlog(source, type, event, event_user, computer, event_time,
comment)
values(:source, :type, :event, USER, :node, timestamp, :comment);
CATCH
STOP($rc, $errmsg);
END;
--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]