Mettez la table de création dans la déclaration :
PREPARE STMT FROM "CREATE TABLE tab_derived_1 SELECT * FROM tab_1 WHERE predict_var = '4' or predict_var = '2' union
(SELECT * FROM tab_1 WHERE predict_var = '0' or predict_var = '1' ORDER BY RAND() limit ? )" ;
EXECUTE STMT USING @sample;
Et si vous voulez retourner les résultats, pas seulement les stocker dans un tableau, faites juste une finale
SELECT * FROM tab_derived_1