Hi,

I am replying to my own post - only to add that in response to the
MySQL misbehaving, I just kill it and restart it.  More than once, I
also restarted the service, drop the database and re-created the
database and all the tables, procedures, triggers, grants, etc. But
still when I call the stored procedure, MySQL hangs.

Any help?

--
Thanks in advance,

Asif


On 8/16/06, Asif Lodhi <[EMAIL PROTECTED]> wrote:
Hi,

I have the following database objects in a purely InnoDB database:

--
------------------------------------------------------------------------------------------------------------------------------------
CREATE TABLE Person (

        PersonID        int             not null PRIMARY KEY,

        Ttl             char(15),

        FllNm           varchar(50),

        frstNm          varchar(15)     not null,

        midNm           varchar(15),

        lstNm           varchar(15)     not null,

        Gender          char(1)         not null DEFAULT 'M' CHECK Gender in 
('M','F'),

        dob             date            CHECK DOB > '19000101',

        nicNo           varchar(13),

        mrtlStts        char(1)         not null DEFAULT 'M' CHECK mrtlStts in 
('S','M','D','W'),

        cellNo          varchar(15),

        website         varchar(80),

        Stts            int             not null DEFAULT 1, /* 1=Active, 
2=Inactive */

                index PersonDob_ndx (dob),

                index PersonNIC_ndx (nicno),

                index PersonCell_ndx (cellNo),

                index PersonFllNm_ndx (FllNm),

                index PersonNm_ndx (frstNm, midNm, lstNm)

) ENGINE=InnoDB;







CREATE FUNCTION CharValIsNumeric (v VARCHAR(15))

        RETURNS boolean

BEGIN

        declare i, l int(2);

        set l=char_length(v);

        set i=1;

        while (i <= l) and (substring(v,i,1) in
('1','2','3','4','5','6','7','8','9','0')) do

                set i=i+1;

        end while;

        IF i > l THEN

                return 1;

        else

                return 0;

        end if;

END;





create procedure PersonAdd (    Ttl_            char(15),

                                frstNm_         varchar(15),

                                midNm_          varchar(15),

                                lstNm_          varchar(15),

                                Gender_         char(1),

                                dob_            char(8),        /* yyyymmdd */

                                nicNo_          varchar(13),

                                mrtlStts_       char(1),

                                cellNo_         varchar(15),

                                website_        varchar(80),

                                machine_no_     int)

begin

        insert into Person (PersonID, Ttl, frstNm, midNm, lstNm, Gender, dob,
nicNo, mrtlStts,

                                cellNo, website)

        select  (machine_no_ * 1000000) + (CASE WHEN ((max(PersonID)) -

                ((max(PersonID) div 1000000) * 1000000)) is null Then

                        0

                ELSE

                        ((max(PersonID)) - ((max(PersonID) div 1000000) * 
1000000))

                END) + 1 as PersonID, Ttl_, frstNm_, midNm_, lstNm_, Gender_, 
dob_,
nicNo_,

                        mrtlStts_, cellNo_, website_

        from Person;

end;







create trigger Person_Check_bi

        before insert on Person

        for each row

begin

        if new.gender <> 'M' and new.gender <> 'F'  then

                set @errmsg = 'Gender value not equal to either M or F';

                insert into tmp1 (checkCol) values (1);

        end if;



        if new.dob < '19000101' then

                set @errmsg = 'Date of birth set far back in time!  Less than 
1900';

                insert into tmp1 (checkCol) values (1);

        end if;



        if new.mrtlStts <> 'S' and

                new.mrtlStts <> 'M' and

                new.mrtlStts <> 'D' and

                new.mrtlStts <> 'W' then



                set @errmsg = 'Marital Status not equal to one of S,M,D,W - 
Single,
Married, Divorced and Widowed';

                insert into tmp1 (checkCol) values (1);

        end if;

        

        if CharValIsNumeric (ltrim(rtrim(new.nicno)))=0 then

                set @errmsg = 'NIC No contains non-numeric characters';

                insert into tmp1 (checkCol) values (1);

        end if;



        if CharValIsNumeric (ltrim(rtrim(new.cellno)))=0 then

                set @errmsg = 'Cell/Mobile No contains non-numeric characters';

                insert into tmp1 (checkCol) values (1);

        end if;

end;



create trigger Person_Check_bu

        before update on Person

        for each row

begin

        if new.gender <> 'M' and new.gender <> 'F'  then

                set @errmsg = 'Gender value not equal to either M or F';

                insert into tmp1 (checkCol) values (1);

        end if;



        if new.dob < '19000101' then

                set @errmsg = 'Date of birth set far back in time!  Less than 
1900';

                insert into tmp1 (checkCol) values (1);

        end if;



        if new.mrtlStts <> 'S' and

                new.mrtlStts <> 'M' and

                new.mrtlStts <> 'D' and

                new.mrtlStts <> 'W' then



                set @errmsg = 'Marital Status not equal to one of S,M,D,W - 
Single,
Married, Divorced and Widowed';

                insert into tmp1 (checkCol) values (1);

        end if;

        

        if CharValIsNumeric (ltrim(rtrim(new.nicno)))=0 then

                set @errmsg = 'NIC No contains non-numeric characters';

                insert into tmp1 (checkCol) values (1);

        end if;



        if CharValIsNumeric (ltrim(rtrim(new.cellno)))=0 then

                set @errmsg = 'Cell/Mobile No contains non-numeric characters';

                insert into tmp1 (checkCol) values (1);

        end if;

end;




--
------------------------------------------------------------------------------------------------------------------------------------




NOW, when I call the procedure like this:

                Call PersonAdd  ( 'Mr.', 'Tom', 'Dick', 'Harry', 'M',
'20061212', '12434321', 'S',
                                             '314515431545432',
'www.website.com', 15 );

the MySQL goes in limbo!

I am constructing the above SQL string through VB6.

Also I need to know as to which MySQL-5.0.22 data-types map to which
VB6 types so that I can map procedure parameters correctly in ADO.
Since I haven't been able to map parameter data-types, I am having the
direct "call" syntax constructed in ADO and using the same.

--
Thanks in advance,

Asif


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to