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]

Reply via email to