3 votes

Formateur d'instructions d'insertion SQL de longueur fixe

Supposons que j'aie cette longue instruction d'insertion

insert into table1 (id, name, phone, very_long_col_name, ...) 
            values (1, 'very long name indeed...', '555-555-5555', 1, ...)

Comme vous pouvez le voir ci-dessus, il est difficile de distinguer les valeurs de leur colonne car leur longueur est inégale

Je cherche quelque chose (par exemple un utilitaire en ligne de commande) pour formater ce qui précède (pas seulement le format SQL) de la manière suivante :

insert into table1 (id, name                      , phone         , very_long_col_name, ...) 
            values (1 , 'very long name indeed...', '555-555-5555', 1                 , ...)

De cette façon, je peux facilement voir quelle valeur correspond à quelle colonne

Il peut s'agir d'un plugin pour notepad++, d'un utilitaire java, d'un plugin pour un IDE SQL, ce qui fait l'affaire...

Les instructions préparées, les paramètres T-SQL, Hibernate, JPA, etc. ne sont pas une option pour l'instant.

7voto

Oded Points 271275

Je ne suggère pas de plugin, mais je vois souvent ce genre de choses formatées de cette manière :

insert into table1 
       (
         id, 
         name,
         phone, 
         very_long_col_name, 
         ...
       ) 
values 
       (
         1, 
         'very long name indeed...', 
         '555-555-5555', 
         1, 
         ...
       )

Je trouve cela plus lisible que de faire défiler une très longue ligne.

2voto

Alix Axel Points 63455

Avez-vous pris en compte les éléments suivants syntaxe alternative ?

INSERT INTO `table` SET
    `id` = 1,
    `name` = 'very long name indeed...',
    `phone` = '555-555-5555',
    `very_long_col_name` = 1,
    `...` = '...'
;

1voto

Kristopher Ives Points 2107

Il est préférable d'utiliser les instructions préparées SQL. Cela vous permet de séparer la syntaxe de la requête SQL de vos données, de sorte que vous devez d'abord préparer l'instruction :

$statement = mysqli_prepare("INSERT INTO `blah` (`id`,`phone`,`name`) VALUES(?,?,?)");

Ensuite, vous lier les données à la déclaration :

$statement->bind('iss', 1234, "(555) 123-4567", "Kris");

J'ai utilisé PHP comme exemple, et le "iss" dans le code ci-dessus indique qu'il lie un Int et 2 chaînes de caractères dans cet ordre.

1voto

Frunsi Points 4550

Si l'endroit où se trouve votre déclaration SQL contient les DONNÉES que vous souhaitez insérer, il est fort probable que vous fassiez quelque chose de très, très, très mal.

Quels sont vos objectifs ? Voulez-vous formater la requête, afin de pouvoir la déverser dans un joli style à des fins de débogage ? C'est facile, il suffit d'ajouter strlen(some_string)-some_fixed_number nombre d'espaces blancs aux endroits appropriés de votre code. Je ne peux pas suggérer de code réel ici, parce que je ne sais pas quel langage vous utilisez ou quels styles de codage vous préférez et ainsi de suite...

Mais même si je voulais le faire, je n'en vois pas l'intérêt. Vous devez séparer les requêtes SQL et les données que vous utilisez dans vos requêtes SQL (par exemple pour l'insertion).

La construction dynamique de chaînes de requête SQL n'est plus à la mode pour de très bonnes raisons (citations, injection SQL, etc.).

EDITAR: Si vous souhaitez formater un dump SQL ou des instructions INSERT qui préparent une base de données, vous pouvez utiliser des données formatées au format CSV. Elles sont plus faciles à lire que les instructions SQL.

1voto

Marc Gravell Points 482669

Variables ?

insert into
table1 ( id,  name,  phone,  very_long_col_name, ...) 
values (@id, @name, @phone, @long_val, ...)

(il est évident que vous devez declare y set / select également)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X