Je veux créer du code robuste et fou. Je veux prendre une requête sous forme de chaîne, créer une vue/table temporaire pour stocker les résultats, l'utiliser, puis déposer la table. Je souhaite utiliser un nom dont la présence dans la base de données n'est pas garantie. Y a-t-il une commande SQL pour générer un nom de table unique? J'utilise postgresql si c'est spécifique à l'implémentation.sql génère un nom de table/vue unique
Répondre
Vous pouvez utiliser une table temporaire. Les tables temporaires sont invisibles pour les autres connexions. Si une table permanente portant le même nom que la table temporaire existe, la table permanente est invisible pour la connexion en cours.
CREATE TEMPORARY TABLE table_name
(
column_name1 data_type(length) constraints,
column_name2 data_type(length) constraints,
...
Voir PostgreSQL manual page.
Je ne sais pas une commande SQL pour le faire, mais vous pouvez simplement générer un peu comme la génération d'un nom de fichier temp: mettre la date, un nombre aléatoire, ID de processus, anniversaire de l'utilisateur: $table_name = join("_", "temp", $$, rand()*0x1000, time)
En toutes les bases de données SQL que j'ai utilisées, chaque session a son propre espace de noms de tables temporaires. Vous pouvez donc simplement créer une table temporaire appelée "foo" et ne pas vous inquiéter de la collision avec un autre thread faisant la même chose (sur une connexion différente!). Dans Oracle, il s'agit spécifiquement d'une "table temporaire LOCAL" - alors qu'une "table temporaire GLOBAL" est vue par toutes les sessions: mais seulement son schéma, pas ses données. Dans MSSQL, les noms de tables sont codés en interne pour être distincts, mais les noms de contrainte ne le sont pas (ils ne l'étaient pas à partir de SQL Server 2000).
Toutes les tables temporaires PostgreSQL sont LOCAL; vous pouvez les spécifier comme GLOBAL, mais cela ne fait rien. –
Je ne sais pas postgres très bien, mais pourriez-vous faire (excusez le pseudo-code):
SET @name = GetBigRandomNumber();
WHILE TableExists(@name)
BEGIN
SET @name = GetBigRandomNumber();
END
- 1. Linq-to-sql génère une requête SQL unique avec distinct()
- 2. NHibernate SchemaExport: Comment générer un nom de clé unique significatif?
- 3. Linq à sql - génère un mauvais sql?
- 4. ValidationRule pour appliquer un nom unique
- 5. SQL unique résultat
- 6. Linq-to-SQL génère un code SQL incorrect?
- 7. Obtenir un nom de fichier unique dans une application multithread
- 8. PHP - Comment sécuriser un nom de variable unique?
- 9. Enregistrement clone SQL avec un index unique
- 10. ID unique SQL Buddy
- 11. SQL unique, sans zéro
- 12. sql contrainte unique
- 13. Enregistrement unique dans Asp.Net SQL
- 14. La clé unique Sql Server est-elle également un index?
- 15. Pourquoi Model.scoped génère-t-il un SQL invalide?
- 16. MSLinqToSQLGenerator génère un résultat différent de SQLMetal
- 17. Aide SQL sur un dilemme de nom
- 18. MSNdis_StatusMediaDisconnect et le périphérique Nom unique
- 19. SQL Server: Retourne un identifiant unique de la procédure stockée
- 20. Taille d'un enregistrement unique? SQL
- 21. Enregistrement unique SQL non colonne?
- 22. Rechargement de la tableVue en cas de sous-classement causant un plantage
- 23. hibernate génère une classe pojo avec un nom de champ = nom de la colonne de base de données
- 24. window.close() génère un problème
- 25. Inhertiance de table unique LINQ to SQL
- 26. Problèmes de recherche d'héritage de table unique
- 27. SQL - Comment appliquer une contrainte "semi-unique"?
- 28. Erreur d'index unique lors de la création d'un index non unique - SQL Server
- 29. AD/IIS Problème d'authentification unique avec nom de domaine complet
- 30. Obtenir le nom de l'application Rails3 dans un modèle qui génère une application rails?
Eh oui, cela semble être la bonne façon d'aller – Claudiu
la limite est que ce n'est pas unique pour la transaction en cours. Par exemple, si vous créez une table temporaire à partir d'une fonction, vous ne pouvez pas appeler cette fonction plus d'une fois par transaction. –