Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Oracle prend en charge l’encapsulation de variables, de types, de procédures stockées et de fonctions dans un package. Lorsque vous convertissez des packages Oracle, vous devez convertir :
- Procédures et fonctions - public et privé
- Variables
- Cursors
- Routines d’initialisation
Cet article explique comment l’Assistant Migration SQL Server (SSMA) pour Oracle convertit les variables de package en SQL Server.
Principes de base de la conversion
Pour stocker des variables de package, SSMA pour Oracle utilise des procédures stockées qui résident dans un schéma spécial ssma_oracle avec la table ssma_oracle.db_storage. Cette table est filtrée par (identificateur de session) et l’heure SPID de connexion. Ce filtrage vous permet de faire la distinction entre les variables de différentes sessions.
Au début de chaque procédure de package convertie, SSMA place un appel à la ssma_oracle.db_check_init_package procédure spéciale, qui vérifie si le package est initialisé et l’initialise si nécessaire. Chaque procédure d’initialisation nettoie la table de stockage et définit les valeurs par défaut pour chaque variable de package.
Exemple
Prenons l’exemple suivant pour convertir plusieurs variables de package :
CREATE OR REPLACE PACKAGE MY_PACKAGE
IS
space varchar(1) := ' ';
unitname varchar(128) := 'My Simple Package';
ts date := sysdate;
END;
Le SSMA le convertit en code Transact-SQL suivant :
CREATE PROCEDURE dbo.MY_PACKAGE$SSMA_Initialize_Package
AS
BEGIN
EXECUTE ssma_oracle.db_clean_storage
EXECUTE ssma_oracle.set_pv_varchar
DB_NAME(),
'DBO',
'MY_PACKAGE',
'SPACE',
' '
EXECUTE ssma_oracle.set_pv_varchar
DB_NAME(),
'DBO',
'MY_PACKAGE',
'UNITNAME',
'My Simple Package'
DECLARE
@temp datetime2
SET @temp = sysdatetime()
EXECUTE sysdb.ssma_oracle.set_pv_datetime2
DB_NAME(),
'DBO',
'MY_PACKAGE',
'TS',
@temp
END
Émulation des méthodes Get et Set pour les variables de package
Oracle utilise les méthodes Get et Set pour les variables de package, afin d’éviter que d’autres sous-programmes ne puissent les lire et les écrire directement. S’il est nécessaire de conserver certaines variables disponibles entre les appels de sous-programme dans la même session, ces variables sont traitées comme des variables globales.
Pour surmonter cette règle d’étendue, SSMA pour Oracle utilise des procédures stockées comme ssma_oracle.set_pv_varchar pour chaque type de variable. Pour accéder à ces variables, SSMA utilise un ensemble de procédures et de fonctions indépendantes des transactions get_*set_*.
| Type de données dans Oracle | Procédure SSMA Set |
|---|---|
| VARCHAR | ssma_oracle.set_pv_varchar |
| DATE (jj/mm/aaaa) | ssma_oracle.set_pv_datetime2 |
| CHAR | ssma_oracle.set_pv_varchar |
| INT | ssma_oracle.set_pv_float |
| FLOAT | ssma_oracle.set_pv_float |
Pour distinguer les variables de différentes sessions, SSMA stocke les variables avec leur SPID (identificateur de session) et l’heure de connexion de la session. Ainsi, les procédures get_* et set_* maintiennent les variables indépendantes des sessions qui les exécutent.