Thank you.  I tried this outside of the procedure and it works. However In
MYSQL 5 I get:
ERROR 1314 (0A000): PREPARE is not allowed in stored procedures

Is there a way without needing to use prepare?

Any idea why CAST(fdata AS UNSIGNED) doesn't work?

David Godsey

> Hello.
>
> You can use this technique:
> drop procedure if exists test20;
> DELIMITER $$
> create procedure test20()
> BEGIN
>                 DECLARE fdata BLOB;
>       DECLARE foffset INT UNSIGNED;
>       DECLARE flength INT UNSIGNED;
>                 DECLARE tmp_int BIGINT UNSIGNED;
>
>                 SELECT 0xABCDEF0123456789 INTO fdata;
>                 SELECT 14 INTO foffset;
>                 SELECT 7 INTO flength;
>
>                 SELECT SUBSTR(BINARY(fdata),
>                 FLOOR(foffset/8)+1,
>                 CEIL((flength + (foffset %8 ))%8))
>                 INTO fdata;
>
>                 SELECT HEX(fdata);
>                 set @a=concat('0x',hex(fdata));
>                 drop temporary table if exists ta;
>                 create temporary table ta(a bigint);
>                 set @s=concat('insert into ta set a=(',@a,'+0)');
>                 select @s;
>                 prepare st1 from @s;
>                 execute st1 ;
>                 deallocate prepare st1;
>                 select @b:=a from ta;
>                 select @b into tmp_int;
>                 drop temporary table ta;
> --                SELECT CONVERT(fdata,BIGINT) INTO tmp_int;
>                 SELECT HEX(tmp_int);
>         END
>         $$
> DELIMITER ;
> call test20();
>
> [EMAIL PROTECTED] mysql-debug-5.0.18-linux-i686-glibc23]$ lmysql <res
> HEX(fdata)
> CDEF012345
> @s
> insert into ta set a=(0xCDEF012345+0)
> @b:=a
> 884478124869
> HEX(tmp_int)
> CDEF012345
>
>
>
>
> David Godsey wrote:
>> I am trying to convert binary data to a bigint so I can do bitwise
>> operations on the data, and I'm having trouble doing it.
>>
>> I noticed that if I have binary data and I:
>> select data>>1; I get 0 (not what I'm expecting).
>>
>> Here is a test procedure I wrote:
>>
>> create procedure test20 ()
>>    BEGIN
>>                 DECLARE fdata BLOB;
>>       DECLARE foffset INT UNSIGNED;
>>       DECLARE flength INT UNSIGNED;
>>                 DECLARE tmp_int BIGINT UNSIGNED;
>>
>>                 SELECT 0xABCDEF0123456789 INTO fdata;
>>                 SELECT 14 INTO foffset;
>>                 SELECT 7 INTO flength;
>>
>>                 SELECT SUBSTR(BINARY(fdata),
>>                 FLOOR(foffset/8)+1,
>>                 CEIL((flength + (foffset %8 ))%8))
>>                 INTO fdata;
>>
>>                 SELECT HEX(fdata);
>>                 SELECT CONVERT(fdata,BIGINT) INTO tmp_int;
>>                 SELECT HEX(tmp_int);
>>         END
>> The last two selects are added to show what I would like to do, but have
>> not been able to get it to work.
>>
>> Any help would be great.  Thanks in advance.
>>
>> Accomplishing the impossible means only that the boss will add it to
>> your
>> regular duties.
>>
>> David Godsey
>>
>> Accomplishing the impossible means only that the boss will add it to
>> your
>> regular duties.
>>
>> David Godsey
>>
>
>
> --
> For technical support contracts, goto https://order.mysql.com/?ref=ensita
> This email is sponsored by Ensita.NET http://www.ensita.net/
>    __  ___     ___ ____  __
>   /  |/  /_ __/ __/ __ \/ /    Gleb Paharenko
>  / /|_/ / // /\ \/ /_/ / /__   [EMAIL PROTECTED]
> /_/  /_/\_, /___/\___\_\___/   MySQL AB / Ensita.NET
>        <___/   www.mysql.com
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:
> http://lists.mysql.com/[EMAIL PROTECTED]
>


Accomplishing the impossible means only that the boss will add it to your
regular duties.

David Godsey


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

Reply via email to