Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Oracle har stöd för inkapsling av variabler, typer, lagrade procedurer och funktioner i ett paket. När du konverterar Oracle-paket måste du konvertera:
- Procedurer och funktioner – både offentliga och privata
- Variabler
- Cursors
- Initieringsrutiner
Den här artikeln beskriver hur SQL Server Migration Assistant (SSMA) för Oracle konverterar paketvariabler till SQL Server.
Grundläggande om konvertering
För att lagra paketvariabler använder SSMA för Oracle lagrade procedurer som finns i ett särskilt ssma_oracle schema tillsammans med ssma_oracle.db_storage en tabell. Den här tabellen filtreras efter (sessionsidentifierare SPID ) och inloggningstid. Med den här filtreringen kan du skilja mellan variabler för olika sessioner.
I början av varje konverterad paketprocedur anropar SSMA den ssma_oracle.db_check_init_package särskilda proceduren, som kontrollerar om paketet initieras och initierar det om det behövs. Varje initieringsprocedur rensar lagringstabellen och anger standardvärden för varje paketvariabel.
Exempel
Tänk dig följande exempel för att konvertera flera paketvariabler:
CREATE OR REPLACE PACKAGE MY_PACKAGE
IS
space varchar(1) := ' ';
unitname varchar(128) := 'My Simple Package';
ts date := sysdate;
END;
SSMA konverterar den till följande Transact-SQL kod:
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
Emulering av Get- och Set-metoder för paketvariabler
Oracle använder Get och Set metoder för paketvariablerna för att undvika att låta andra underprogram läsa och skriva dem direkt. Om det finns ett krav på att vissa variabler ska vara tillgängliga mellan underprogramanrop i samma session behandlas dessa variabler som globala variabler.
För att övervinna den här omfångsregeln använder SSMA för Oracle lagrade procedurer som ssma_oracle.set_pv_varchar för varje variabeltyp. För åtkomst till dessa variabler använder SSMA en uppsättning transaktionsoberoende get_* och set_* procedurer och funktioner.
| Datatyp i Oracle | SSMA-procedur Set |
|---|---|
| VARCHAR | ssma_oracle.set_pv_varchar |
| DATUM | ssma_oracle.set_pv_datetime2 |
| CHAR | ssma_oracle.set_pv_varchar |
| INT | ssma_oracle.set_pv_float |
| FLOAT | ssma_oracle.set_pv_float |
För att skilja mellan variabler från olika sessioner lagrar SSMA variablerna tillsammans med deras SPID (sessionsidentifierare) och sessionens inloggningstid. Således håller get_* och set_* procedurerna variablerna oberoende av de sessioner som kör dem.