Mysql error using variable as table name

Why am I getting this error?

CREATE DEFINER=`root`@`localhost` PROCEDURE `selectrecords`(tablename varchar(50))
begin
set @table_name=tablename;
set @sql_text=concat('Select * from @table_name');
prepare statement from @sql_text;
execute statement;
deallocate prepare statement;
end

Error:

....to use near '@table_name' at line 1

My code is correct, but I do not understand why ....

+5
source share
1 answer

I think you mean

CREATE PROCEDURE `selectrecords`(tablename varchar(50))
begin
    set @sql_text = concat('Select * from ', tablename);
    prepare statement from @sql_text;
    execute statement;
    deallocate prepare statement;
end

even in dynamic sql, you cannot parameterize table names as well as column names, so your only choice is to concatenate with the row. Only values ​​can be placed in the place holder.


UPDATE 1

CREATE PROCEDURE `selectrecords`(tablename varchar(50))
begin
    set @val = idnumber;
    set @sql_text = concat('Select * from ', tablename, ' WHERE id = ?');
    prepare statement from @sql_text;
    execute statement USING @val;
    deallocate prepare statement;
end
+4
source

All Articles