Error " 1660 Illegal value used as argument of dynamic column function" shows up when one tries to assign two values to the same dynamic column within a single statement. The same operation would be allowed in an INSERT, where the last value would be used. So, either make dynamic columns behave as INSERT, or provide a better error message, e.g. "duplicate field name"
SELECT COLUMN_CREATE( 5 , 1 , 5 , 1 ) ;