Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Oracle permette di incapsulare in un pacchetto variabili, tipi, stored procedure e funzioni. Quando si converte un pacchetto Oracle, è necessario convertire:
- Procedure e funzioni - sia pubblica che privata
- Variabili
- Cursori
- Routine di inizializzazione
Questo articolo descrive in che modo SQL Server Migration Assistant (SSMA) per Oracle converte le variabili del pacchetto in SQL Server.
Nozioni di base sulla conversione
Per archiviare le variabili del pacchetto, SSMA per Oracle usa stored procedure che risiedono in uno schema ssma_oracle
speciale insieme alla tabella ssma_oracle.db_storage
. Questa tabella viene filtrata in base a SPID
(identificatore di sessione) e all'ora di accesso. Questo filtro consente di distinguere tra variabili di sessioni diverse.
All'inizio di ogni routine del pacchetto convertita, SSMA inserisce una chiamata alla procedura speciale ssma_oracle.db_check_init_package
, la quale controlla se il pacchetto viene inizializzato e lo inizializzerà, se necessario. Ogni procedura di inizializzazione pulisce la tabella di archiviazione e imposta i valori predefiniti per ogni variabile del pacchetto.
Esempio
Si consideri l'esempio seguente per la conversione di diverse variabili del pacchetto:
CREATE OR REPLACE PACKAGE MY_PACKAGE
IS
space varchar(1) := ' ';
unitname varchar(128) := 'My Simple Package';
ts date := sysdate;
END;
SSMA lo converte nel codice Transact-SQL seguente:
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
Emulazione di metodi Get e Set per le variabili del pacchetto
Oracle usa metodi Get
e Set
per le variabili del pacchetto, per evitare di consentire ad altri sottoprogrammi di leggerli e scriverli direttamente. Se è necessario mantenere alcune variabili disponibili tra le chiamate di sottoprogramma nella stessa sessione, queste variabili vengono considerate come variabili globali.
Per superare questa regola di ambito, SSMA per Oracle usa stored procedure come ssma_oracle.set_pv_varchar
per ogni tipo di variabile. Per accedere a queste variabili, SSMA usa un set di funzioni e procedure get_*
e set_*
indipendenti dalla transazione.
Tipo di dati Oracle | Procedura SSMA Set |
---|---|
VARCHAR | ssma_oracle.set_pv_varchar |
DATE | ssma_oracle.set_pv_datetime2 |
CHAR | ssma_oracle.set_pv_varchar |
INT | ssma_oracle.set_pv_float |
FLOAT | ssma_oracle.set_pv_float |
Per distinguere le variabili da sessioni diverse, SSMA archivia le variabili insieme al relativo SPID
(identificatore di sessione) e all'ora di accesso della sessione. Pertanto, le procedure get_*
e set_*
mantengono le variabili indipendenti dalle sessioni che le eseguono.