Applikasjonsutvikling: Programmere tjenerapplikasjoner

CLR-prosedyrer (Common Language Runtime) med flere resultatsett

Det største antall resultatsett som kan returneres av en CLR-prosedyre, er begrenset. Grensen bestemmes av det største antall DB2DataReader-objekter som DB2 .NET Data Provider kan ha åpne samtidig i en tilkobling. Støtten for samtidig aktiv datalesing gjør det mulig at flere DB2DataReader-objekter blir åpnet i en og samme tilkobling. Derfor kan det returneres flere resultatsett fra en CLR-prosedyre.

Kontorollmodi for utføring av CLR-rutiner (Common Language Runtime) (EXECUTION CONTROL-leddet)

Som databaseansvarlig eller applikasjonsutvikler vil du kanskje beskytte sammensettingene ("assemblies") som er tilknyttet de eksterne DB2 Universal Database-rutinene ved å begrense handlingene til rutiner under kjøring. DB2 .NET CLR-rutiner støtter spesifisering av en utføringskontrollmodus som identifiserer hvilke typer handlinger en rutine har lov å utføre under kjøring. Under kjøringen kan DB2 UDB oppdage om rutinen prøver å utføre ulovlige handlinger, noe som er nyttig når du vil vite om en sammensetting har blitt kompromittert.

Du definerer utføringskontrollmodusen til en CLR-rutine ved å oppgi det valgfrie leddet EXECUTION CONTROL i CREATE-setningen for rutinen. Gyldige modi er:

Du endrer utføringskontrollmodusen for en eksisterende CLR-rutine ved å utføre setningen ALTER PROCEDURE eller ALTER FUNCTION.

Hvis EXECUTION CONTROL-leddet ikke er oppgitt for en CLR-rutine, kjøres CLR-rutinen med den strengeste utføringskontrollmodusen (SAFE). Rutiner som opprettes med denne utføringskontrollmodusen har bare tilgang til ressurser som er styrt av databasesystemet. Modi for utføringskontroll som er mindre begrensende lar rutiner få tilgang til filer på det lokale filsystemet (FILEREAD eller FILEWRITE) eller på nettverket. Modusen UNSAFE betyr at det ikke er noen begrensninger på virkemåten til rutinen. Rutiner som er definert med modusen UNSAFE for utføringskontroll kan utføre binærkode.

Disse kontrollmodiene representerer et hierarki av tillatte handlinger, der en modus på et høyere nivå omfatter handlingene som er tillatt under den i hierarkiet. For eksempel tillatter modusen NETWORK at en rutine får tilgang til filer på nettverket, filer på det lokale filsystemet og ressurser som er styrt av databasesystemet. Bruk en modus som begrenser så mye som mulig, og unngå å bruke modusen UNSAFE.

Hvis DB2 UDB oppdager at en CLR-rutine prøver å utføre en handling som ikke er tillatt i følge utføringskontrollmodusen, returnerer DB2 UDB en feil (SQLSTATE 38501).

EXECUTION CONTROL-leddet kan bare oppgis for LANGUAGE CLR-rutiner. Bruksområdet til EXECUTION CONTROL-leddet er begrenset til selve .NET CLR-rutinen, og gjelder ikke for andre rutiner den anroper.

Maksimal desimalpresisjon og skala i CLR-rutiner (Common Language Runtime)

Datatypen DECIMAL i DB2 Universal Database (UDB) har en presisjon på 31 siffer og en skala på 28 siffer. Datatypen .NET CLR System.Decimal er begrenset til en presisjon på 29 siffer og en skala på 28 siffer. På grunn av dette kan ikke eksterne DB2 UDB CLR-rutiner tildele verdier større enn (2^96)-1, som er den høyeste verdien som kan fremstilles med en presisjon på 29 siffer og en skala på 28 siffer, til en variabel med datatypen System.Decimal. DB2 UDB returnerer kjøretidsfeilen (SQLSTATE 22003, SQLCODE -413) hvis en slik tildeling forekommer.

Når en CREATE-setning for en rutine utføres, og en parameter med datatypen DECIMAL er definert med en skala høyere enn 28, gir DB2 UDB feilen (SQLSTATE 42611, SQLCODE -604).

[ Øverst på siden |Forrige side | Neste side | Innhold ]