Omfanget af VARRAY, der er oprettet som PL/SQL-blokmedlem, er begrænset til den blok, hvori det er oprettet, det betyder, at vi ikke kan bruge denne VARRAY uden for dens blok eller endda genbruge den, og det er dens største ulempe. Så gå videre og læs videre for at finde ud af, hvordan vi kan overvinde denne ulempe ved VARRAY.
Denne ulempe kan let overvindes, hvis vi kan finde ud af en måde at skabe VARRAY uden for PL/SQL-blokken og gemme den permanent i skemaet. Heldigvis kan vi nå begge mål ved at oprette VARRAY som et databaseobjekt. Det er præcis, hvad vi skal lære i denne øvelse.
I denne øvelse lærer vi –
- Sådan opretter du VARRAY som databaseobjekt.
- Sådan bruger du den varray.
- Sådan indsætter du data i VARRAY.
- Sådan hentes data ind i (fra) VARRAY
- Sådan opdaterer du dataene for VARRAY.
Lad os starte med det første trin.
Hvordan opretter man VARRAY som databaseobjekt?
SET SERVEROUTPUT ON; CREATE OR REPLACE TYPE dbObj_vry IS VARRAY (5) OF NUMBER; /
Ovenstående kode ved vellykket udførelse vil skabe en VARRAY med navnet dbObj_vry, som vil have størrelsesgrænsen på 5 elementer, og deres datatype vil være NUMBER. Denne VARRAY har bredere anvendelsesområde og kan bruges ikke kun inde i PL/SQL-blokken, men også med andre skemaobjekter.
Hvordan bruges VARRAY oprettet som databaseobjekt?
Fordelen ved at definere VARRAY som databaseobjekt er, at der kan henvises til det fra ethvert program, der har tilladelse til at bruge det. Du kan bruge VARRAY med tabeller, poster eller endda med PL/SQL-blokke.
Lad os tage eksemplet:
Eksempel 1. Hvordan definerer man en kolonne i en tabel ved hjælp af VARRAY?
CREATE TABLE calendar( day_name VARCHAR2(25), day_date dbObj_vry ); /
I ovenstående kode lavede vi en tabel med navnet Kalender, som har to kolonner dag_navn og dag_dato. Den første kolonne kan indeholde data af VARCHAR2-datatypen, mens den anden kolonne kan indeholde data af en dbObj_vry-type, som er en VARRAY.
Info:Hvad betyder det at definere en kolonne i en tabel som VARRAY-type?
At definere en kolonne i en tabel som VARRAY-type betyder, at den kan indeholde 'n' antal værdier i den. Hvor 'n' er lig med størrelsesgrænsen for den varray. I vores tilfælde er størrelsesgrænsen for VARRAY 5, hvilket betyder, at kolonnen "Dagsdato" i tabelkalenderen kan indeholde 5 værdier.
Hvordan indsætter man data i VARRAY?
INSERT INTO calendar ( day_name, day_date ) VALUES ( 'Sunday', dbObj_vry (7, 14, 21, 28) );
Denne indsæt DML-sætning vil indsætte en række i kalendertabellen. Det er nemt at indsætte data i den første kolonne 'Dagsnavn', som er af varchar2-datatypen. Du skal blot skrive de ønskede data og omslutte dem i enkelte anførselstegn. Men det samme er ikke sandt med den anden kolonne 'Dagsdato', som er af typen VARRAY. For at indsætte data i kolonnen, som er af VARRAY-typen, skal du først skrive navnet på varrayen og angive dataene.
Du skal også sørge for fire ting
- De data, du leverer, skal være indeholdt i parentesen.
- Datatypen for dataene skal stemme overens med datatypen for elementerne i din VARRAY, som i vores tilfælde er NUMBER.
- Antallet af elementer, du indsætter i kolonnen, skal enten være mindre end eller lig med størrelsesgrænsen for VARRAY. I vores tilfælde er det 5 og vi indsætter 4 elementer i kolonnen, hvilket er helt ok. Men hvis jeg antager, at jeg indsætter 6 elementer i kolonnen, vil der være en fejl.
- Hvis du indsætter flere data i VARRAY-kolonnen, skal du sørge for at adskille elementerne fra hinanden ved hjælp af semikolon.
Hvordan henter man dataene fra VARRAY?
Data kan hentes ved hjælp af SELECT-sætning. Enhver korrekt skrevet SELECT-erklæring vil gøre arbejdet. For eksempel
SELECT * FROM calendar;
Dette vil hente alle data fra tabelkalenderen.
Hvis du ønsker at vise de data, der er gemt i kolonnen, som indeholder data af VARRAY-typen, i et relationelt format, kan du bruge TABLE-udtrykket. For eksempel
SELECT tab1.day_name, vry.column_value AS "Date" FROM calendar tab1, TABLE (tab1.day_date) vry;
Denne SELECT-sætning viser dig dataene fra begge kolonner i et relationelt format. TABLE-udtrykket kan åbne samlingsforekomsten og repræsentere objektrækkerne i relationelt format.
Hvordan opdaterer man dataene for kolonnen af typen VARRAY?
Opdatering af værdierne for VARRAY type kolonne er ret simpel. Nedenstående eksempel viser dig, hvordan du opdaterer værdierne for dag_dato-kolonner.
UPDATE calendar SET day_date = dbObj_vry(10,14,21,28) WHERE day_name = 'Sunday';
Eksempel 2. Hvordan bruger man VARRAY med PL/SQL-blok?
I ovenstående eksempel lærte vi, hvordan man bruger VARRAY, som er oprettet som databaseobjekt, til at definere kolonnen i en tabel. Nu vil vi se, hvordan man bruger den samme varray inde i en PL/SQL-blok.
DECLARE vry_obj dbObj_vry := dbObj_vry(); BEGIN FOR i IN 1..vry_obj.LIMIT LOOP vry_obj.EXTEND; vry_obj(i):= 10*i; DBMS_OUTPUT.PUT_LINE(vry_obj(i)); END LOOP; END; /
Du har set dette eksempel i den sidste tutorial. Der er ingen så store ændringer her, bortset fra at denne gang i stedet for at definere VARRAY'en inde i blokken, oprettede vi den som et selvstændigt databaseobjekt. Jeg foreslår, at du tager et kig på den sidste tutorial, hvor jeg forklarede ovenstående kode i detaljer.
Det er PL/SQL-tutorialen om, hvordan man opretter VARRAY som databaseobjekt i Oracle. Håber du nød at læse, hvis ja, så sørg for at dele denne blog på dit sociale med dine venner. Tak og god dag!