Upsert (update ou insert) dans Sybase ASE?
Je suis en train d'écrire une application pour déplacer des données d'Oracle Sybase et besoin pour exécuter une mise à jour /les opérations d'insertion. Dans Oracle, j'utiliserais la FUSION, mais il ne semble pas être disponible dans Sybase (pas dans le ASE, de toute façon). Je sais que cela peut être fait avec plusieurs états, mais pour un couple de raisons, je suis vraiment essayer d'obtenir en une seule instruction.
Des suggestions?
OriginalL'auteur Ickster | 2010-12-21
Vous devez vous connecter pour publier un commentaire.
ASE de 15,7 dispose de cette fonctionnalité.
infocenter.sybase.com/help/topic/...
OriginalL'auteur Ritter
malheureusement, il est impossible d'insérer et de mettre à jour une table dans une déclaration sans l'aide de la FUSION. qui d'ailleur n'existe pas en SQL de SQL:2008, selon cette l'article de toute façon, et pris en charge par presque toutes les principales bases de données, à l'exception de Sybase ASE et PostgreSQL.
OriginalL'auteur vsi
Sybase et DB2 sont très IEC/ISO/ANSI SQL Standrd conforme. MS, un peu moins.
Oracle n'est pas très conforme à la Norme à tous (malgré ce que les glossies dire). Plus important, en raison de son limites, la méthode qu'ils utilisent pour les surmonter est d'introduire des Extensions de SQL (qui ne sont pas requis pour les autres SGBD, qui n'ont pas de limites). Belle façon de s'assurer que les clients ne peuvent pas migrer loin.
Donc le meilleur conseil pour vous est d'apprendre le SQL Standard façon de faire ce que vous faisiez sur l'Oracle de côté. Et la deuxième (pas la première) en savoir plus sur Sybases ou DB2s (ou autre) des Extensions.
"FUSION" et de "UPSERT" n'existe pas en SQL, elles existent dans Oracle. La ligne du bas est, vous devez mettre à JOUR et de l'INSÉRER dans deux opérations distinctes.
En SQL, mise à JOUR et INSÉRER appliquer à une seule table; vous pouvez avoir assez complexe DE clauses.
Pour "FUSIONNER", c'est tout simplement un:
Mise à jour est tout simplement le complément:
Dans la mise à JOUR, il est facile de fusionner les OÙ les conditions de travail et d'éliminer la sous-Requête (je suis en train de montrer à vous pour l'explication).
Comme je le comprends, Oracle est abyssmal à l'exécution des sous-requêtes (SQL Standard). C'est pourquoi ils ont tous ces non-Standard "FUSION", etc., dont le but est d'éviter que le Standard de la sous-Requête de la syntaxe, à laquelle tous les autres SGBD effectue avec facilité.
Ok, mais la question posée pour "seule instruction". J'ai fourni la seule "méthode". Cela fonctionne pour le traitement (plusieurs lignes). Le seul autre "méthode" écrire une procédure stockée, mais qui va se dégrader vers la ligne de traitement (très lent).
OriginalL'auteur PerformanceDBA
Peut-être que ça pourrait fonctionner. Testé dans ASA9.
OriginalL'auteur Fabrício Benvenutti
Peut-être que vous pourriez essayer de faire semblant avec INSERT et/ou de mise à JOUR à PARTIR avec certains des sous-requêtes, mais il ne sera pas aussi pratique que Oracle n'.
Vous voulez le faire dans le code ou un entrepôt de données ? parce que vous pouvez aussi regrouper tous les SQL dans une procédure stockée, si vous voulez cacher la complexité des requêtes.
OriginalL'auteur Stef