Peter,

Thanks for the response!

Unfortunately, that worked but a new error arose:

check the manual that corresponds to your MySQL server version for the right 
syntax to use near 'ID = (select max(CONVERT(id_field, signed)) from 
my_table_t)' at line 1

Is there a better way to generate incremented sequence IDs? 

Can this be done in a stored function?

Happy programming,

James

On Jan 4, 2011, at 7:45 PM, Peter Brawley wrote:

>> generate_dynamic_id('my_sequence_id_s', 'my_table_t', 'table_id', 
>> @dynamicId);
> 
> Should be:
> 
> CALL generate_dynamic_id('my_sequence_id_s', 'my_table_t', 'table_id', 
> @dynamicId);
> 
> PB
> 
> ----
> 
> On 1/4/2011 9:28 PM, James Dekker wrote:
>> Hello there,
>> 
>> I am using MySQL 5 on OS X - Snow Leopard...
>> 
>> Have working code in place which obtains the highest sequence number ID from 
>> a sequence table and then increments and assigns it to its corresponding 
>> table:
>> 
>> The original code's purpose is to dynamically increments a specific table's 
>> last sequence id and set its corresponding table's id to that new value.
>> 
>> Notes:
>> 
>> -------------------------------------------------------------
>> 
>> (1) Original Code Snippet (which is working):
>> 
>> -- Get last sequence number.
>> replace into my_sequence_id_s set id = (select max(CONVERT(sequence_id, 
>> signed)) from my_table_t);
>> 
>> -- Increments the number.
>> insert into my_sequence_id_s set id = null;
>> 
>> -- Saves the number as a variable
>> set @dynamicId = last_insert_id();
>> 
>> -- Print
>> select @dynamicId;
>> 
>> -------------------------------------------------------------
>> 
>> (2) Refactoring:
>> 
>> DROP PROCEDURE IF EXISTS generate_dynamic_id#
>> CREATE PROCEDURE generate_dynamic_id(IN _sequence_table varchar(40),IN 
>> _actual_table varchar(40), IN _id_field VARCHAR(40), OUT dynamic_id 
>> varchar(40))
>> BEGIN
>>   -- Get Last Sequence Number
>>   set @getLastSequenceNumberSQL = concat('REPLACE INTO ', _sequence_table, 
>> 'SET ID = (select max(CONVERT(',_id_field,', signed)) from ', _actual_table, 
>> ');');
>>   prepare lastRecordStmt from @getLastSequenceNumberSQL;
>>   execute lastRecordStmt;
>>   deallocate prepare lastRecordStmt;
>> 
>>   -- Increments the number.
>>   set @createNewSequenceNumberSQL = concat('insert into ', _sequence_table 
>> ,' set id = null;');
>>   prepare newSequenceNumberStmt from @createNewSequenceNumberSQL;
>>   execute newSequenceNumberStmt;
>>   deallocate prepare newSequenceNumberStmt;
>> 
>>   -- Set the number as a dynamic variable.
>>   set @dynamic_id = last_insert_id();
>> END;
>> #
>> 
>> -------------------------------------------------------------
>> 
>> (3) Here's the calling function (which fails):
>> 
>> -- Get dynamically incremented id
>> generate_dynamic_id('my_sequence_id_s', 'my_table_t', 'table_id', 
>> @dynamicId);
>> 
>> Error:
>> 
>> com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: You have an error in 
>> your SQL syntax; check the manual that corresponds to your MySQL server 
>> version
>> for the right syntax to use near 'generate_dynamic_id('my_sequence_id_s', 
>> 'my_table_t', 'table_id', @dyn' at line 1.
>> 
>> -------------------------------------------------------------
>> 
>> For some odd reason, dynamic function calls are not allowed in Stored 
>> Functions or Triggers, so that's why a Stored Procedure was used.
>> 
>> As you can see, I am setting up varchars at the parameters and then trying 
>> to concatenate them as strings and run them inside prepared statements.
>> 
>> Any help would be greatly appreciated...
>> 
>> -James
> 
> -- 
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/mysql?unsub=james.dek...@gmail.com
> 


--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/mysql?unsub=arch...@jab.org

Reply via email to