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 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]