SQL Server est capable de retourner les résultats de plusieurs requêtes en un seul aller-retour,: par exemplemultiples d'Oracle resultsets dans Odp.net, sans refcursors
select a, b, c from y;
select d, e, f from z;
Oracle n'aime pas cette syntaxe. Il est possible d'utiliser des curseurs de référence, comme ceci:
begin
open :1 for select count(*) from a;
open :2 for select count(*) from b;
end;
Cependant, vous encourez une pénalité dans les curseurs d'ouverture/fermeture et vous pouvez maintenir les verrous de base de données pendant une période prolongée. Ce que je voudrais faire est de récupérer les résultats de ces deux requêtes en une seule fois, en utilisant Odp.net. C'est possible?
Un select, dans Oracle, ne prend pas de verrous. Et les curseurs sont utilisés implicitement de toute façon, donc je ne pense pas que vous épargniez beaucoup, sauf sur les allers-retours du réseau. –
@Gary Les allers-retours au réseau sont coûteux. Si vous exécutez plusieurs requêtes dans une seule commande dans SQL Server, vous bénéficiez d'une augmentation appréciable de la performance, en particulier si vous effectuez beaucoup de tâches en même temps. Je ne vois pas pourquoi cela ne devrait pas être possible dans Oracle. Comment Oracle prend-il en charge les lectures répétables sans verrous? –
Oracle utilise le contrôle de concurrence multi-versionnage. Fondamentalement, il conserve un historique des modifications effectuées (au moins aussi longtemps que la transaction active la plus ancienne), et s'il rencontre des données qui ont changé, il regarde l'historique pour voir quel était l'état des données lorsque la requête a démarré. SQL Server 2005 a ajouté ceci et l'a appelé isolation de capture instantanée. –