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 supporta l'incapsulamento di variabili, tipi, stored procedure e funzioni in un pacchetto. Quando si converte un pacchetto Oracle, è necessario convertire:
- Procedure e funzioni - sia pubblica che privata
- Variabili
- Cursors
- 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 utilizza stored procedure che risiedono in uno schema speciale ssma_oracle insieme a una tabella ssma_oracle.db_storage. Questa tabella viene filtrata in base SPID all'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 ssma_oracle.db_check_init_package procedura speciale, che 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 sottogrammi di leggerli e scriverli direttamente. Se è necessario mantenere alcune variabili disponibili tra le chiamate di sottogramma 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 utilizza un set di procedure e funzioni indipendenti dalla transazione get_* e set_*.
| Tipo di dati in Oracle | Procedura SSMA Set |
|---|---|
| VARCHAR | ssma_oracle.set_pv_varchar |
| DATTERO | 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 get_* procedure e set_* mantengono le variabili indipendenti dalle sessioni che le eseguono.