Un besoin fréquent est de disposer d’une table temporaire à des fins de consultation (lookup). Souvent, le besoin temporaire et le volume de données ne justifient pas un stockage dans une base de données relationnelle. À cette fin, Invantive SQL propose des tables temporaires en mémoire (in-memory) qui peuvent être facilement remplies en utilisant par exemple la source csvtable ou xmltable.
Le code suivant crée une table eu_countries avec tous les membres de l’UE (à l’exclusion de la Grande-Bretagne) :
create or replace table eu_countries@inmemorystorage
as
select *
from csvtable
( passing 'SE,IM,CZ,ES,SK,SI,BE,BG,CY,DK,DE,EE,FI,FR,GR,HU,IE,IT,MC,HR,LT,LV,LU,MT,AT,PL,PT,RO'
row delimiter ','
column delimiter '#'
columns country_code varchar2 position next
)
La table en mémoire contenant les pays de l’UE a le contenu suivant :
Cette table peut être utilisée par exemple pour corriger les codes de TVA dans Invantive Estate, comme suit :
--
-- Client hors NL, mais au sein de l'UE : code TVA 7
--
update bubs_leveranciers_v@ora
set bce_code = '7'
where lvr_land in ( select country_code from eu_countries@inmemorystorage )
and lvr_land != 'NL'
and bce_code is null
Étant donné que le nombre d’éléments dans la clause IN est réduit et que les tables en mémoire sont considérées comme très rapides, le IN sera automatiquement réécrit sous la forme d’une liste explicite de valeurs. Cela permet l’utilisation du filtrage côté serveur (server-side filtering) ainsi que l’utilisation d’index sur la plateforme cible.
Un exemple similaire pour la mise à jour des codes de compte Exact Online à l’aide de csvtable est disponible sur Massaal bijwerken relatiecodes in Exact Online naar specifieke nieuwe relatiecodes.
Plus d’informations sur l’utilisation et les avantages en termes de performance du filtrage côté serveur sont disponibles sur How to filter data from OData query on Azure Data Factory? - 3 van forums.
