Je souhaite copier un seul enregistrement d'une table, modifier certains des champs de l'enregistrement et les insérer dans la même table. La table a 90 colonnes. Pensée d'utiliser insert..select dans une instruction mais il y a 90 colonnes et j'ai besoin de dire le nom de la colonne dans la requête de sélection. Comment puis-je le faire d'une meilleure manière à Perldbi. Pls me donne un exemple.Insert DBI Perl et sélectionnez
2
A
Répondre
3
Fetch et mettre en cache les noms de colonnes pour votre table à l'aide NAME statement attribute
my $sth = $dbh->prepare('SELECT * FROM my_table where 1=0');
$sth->execute;
my $cols = $sth->{NAME};
puis utilisez $ pour construire Col. votre insert ... select en utilisant une fonction de remplacement pour injecter vos modifications dans la sélection.
my %mods_for_column = ('foo' => 'foo+10', 'bar' => 'trim(bar)');
my $inscols = join(',', @$cols);
my $selcols = join(',',
map { exists($mods_for_column($_)) ? $mods_for_column($_) : $_ } @$cols
);
my $sql = "insert into my_table ($inscols) select $selcols from my_table where mumble...";
Questions connexes
- 1. Perl DBI connecter et exécuter le délai
- 2. script perl sans utiliser DBI
- 3. perl dbi: fetchrow_arrayref
- 4. Perl Dbi et les procédures stockées
- 5. dépannage sous-routine perl et erreur dbi
- 6. texte tronqué en Perl DBI insérer
- 7. Constantes Perl DBI - comment accéder?
- 8. insert combiner (valeur et sélectionnez)
- 9. Perl dbi: résultat fetchrow_array limite:
- 10. perl DBI accorder des privilèges
- 11. Perl simulant Net :: DBI fetchall_arrayref()
- 12. perl dbi rollback ne fonctionne pas
- 13. Performances DBI Perl sur le sql imbriqué
- 14. requêtes asynchrones avec MySQL/Perl DBI
- 15. perl dbi reconnecter sur la déconnexion
- 16. Référence aux colonnes (MySQL) avec Perl (DBI)
- 17. Création de tables temporaires perl cgi dbi
- 18. Perl - DBI :: CSV numéro de tri
- 19. Installation de Perl DBI sur l'instance amazon
- 20. insert DB2 si pas présent et sélectionnez
- 21. Valeurs booléennes dans MySQL, Perl DBI et JSON
- 22. Perl DBI: Valeur de résultat coupée
- 23. Perl DBI dynamique fetchrow en boucle
- 24. Perl DBI mise à jour mysql
- 25. Perl DBI se connectant à Oracle 12c
- 26. Acheter un message d'erreur dans le module Perl DBI
- 27. Perl DBI MySQL - colonne inconnue dans la 'liste des champs'
- 28. Quel est l'équivalent Python de DBI de Perl?
- 29. (Perl) Créer une requête pour DBI avec SQL :: Résumé
- 30. Perl DBI - transfert de données entre deux serveurs sql - fetchall_arrayref
Cela devrait être '$ mods_for_column {$ _}' plutôt que 'mods_for_column ($ _)'. Et il y a un méchant bug caché là-dedans. Que faire si '% mods_for_column' inclut' baz => 0'? Mieux vaut utiliser «existe» plutôt que de vérifier la vérité. –
Merci beaucoup pour l'info. je veux avoir foo remplacé par 0. 'foo' => '0'. foo est un champ numérique dans la table. Ça ne marche pas quand j'ai zéro sur la carte. – Arav
@davorg: c'est ce que je reçois pour taper du code sans l'essayer :(J'ai édité l'exemple incorporant vos suggestions – dbenhur