Alors que beaucoup disent qu'il est préférable de répertorier explicitement chaque colonne que vous souhaitez renvoyer, il existe des situations où vous souhaiterez peut-être gagner du temps et omettre certaines colonnes des résultats (par exemple, les tests). Ci-dessous, j'ai donné deux options qui résolvent ce problème.
DELIMITER $$
CREATE DEFINER=`root`@`%` FUNCTION `getTableColumns`(_schemaName varchar(100), _tableName varchar(100), _omitColumns varchar(200)) RETURNS varchar(5000) CHARSET latin1
BEGIN
SELECT GROUP_CONCAT(COLUMN_NAME) FROM information_schema.columns
WHERE table_schema = _schemaName AND table_name = _tableName AND FIND_IN_SET(COLUMN_NAME,_omitColumns) = 0 ORDER BY ORDINAL_POSITION;
END
Créez et exécutez l'instruction select :
SET @sql = concat('SELECT ', (SELECT
functions.getTableColumns('test', 'employees', 'age,dateOfHire')), ' FROM test.employees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
SET @sql = CONCAT('SELECT ', (SELECT GROUP_CONCAT(COLUMN_NAME) FROM
information_schema.columns WHERE table_schema = 'test' AND table_name =
'employees' AND column_name NOT IN ('age', 'dateOfHire')),
' from test.eployees');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
*Remplacez test par votre propre nom de schéma
**Remplacez les employés par votre propre nom de table
***Remplacez age,dateOfHire par les colonnes que vous souhaitez omettre (vous pouvez le laisser vide pour renvoyer toutes les colonnes ou simplement entrer un nom de colonne à omettre)
** ** Vous pouvez ajuster les longueurs des varchars dans la fonction pour répondre à vos besoins