sql >> Database >  >> RDS >> Oracle

Hoe maak je een geneste tabel als database-object in Oracle?

Als u van plan bent de geneste tabel die u wilt maken opnieuw te gebruiken, dan is dit de beste keuze voor u als databaseobject. U kunt ze permanent in uw database opslaan en gebruiken wanneer u maar wilt.

Naast het maken van geneste tabellen van het type PL/SQL-verzameling binnen een PL/SQL-blok, kunt u ze ook als databaseobject maken en permanent opslaan. Ook kun je ze hergebruiken wanneer je maar wilt. Geneste tabel die als databaseobject is gemaakt, kan zijn gebaseerd op Primitive Datatype of User-Define Datatype. In deze tutorial concentreren we ons op de eerste en laten we de laatste over voor de volgende tutorial.

Een verzameling geneste tabeltypes maken op basis van primitief gegevenstype

Met primitief datatype bedoelen we de datatypes die vooraf zijn gedefinieerd door de taal en worden genoemd door een gereserveerd trefwoord. U kunt dit Oracle-document raadplegen om meer te lezen over PL/SQL-gegevenstypen.

De volgende tabellen hebben geen beperking, index of iets anders ontworpen en zijn puur gemaakt om te demonstreren hoe een geneste tabel als databaseobject kan worden gemaakt.

Stap 1:Serveruitvoer inschakelen

SET SERVEROUTPUT ON;

Stap 2:maak een verzameling geneste tabeltypes

CREATE OR REPLACE TYPE my_nested_table IS TABLE OF VARCHAR2 (10);
/

De bovenstaande verklaring over succesvolle uitvoering zal een geneste tabel maken met de naam 'my_nested_table' die gebaseerd zal zijn op het primitieve datatype VARCHAR2.

Stap 3:Hoe geneste tabel gebruiken?

Het verzamelingstype dat we hierboven hebben gemaakt, kan worden gebruikt om het type kolom van een tabel te specificeren.

CREATE TABLE my_subject(
	  sub_id    	NUMBER,
	  sub_name  	VARCHAR2 (20),
	  sub_schedule_day    my_nested_table
) NESTED TABLE sub_schedule_day STORE AS nested_tab_space;
/

De bovenstaande tabel is een normale tabel, behalve dat de 3 kolom van het type geneste tabel is die meerdere waarden kan bevatten. Om een ​​kolom van een tabel als genest tabeltype te definiëren, moet u de compiler de naam van de kolom en een opslagtabel vertellen. U kunt dit doen door de clausule NESTED ABLE en STORE AS te gebruiken, zoals we hier in regel nummer 5 hebben gedaan. Met clausule NESTED TABLE specificeren we de naam van de kolom en met behulp van de clausule STORE AS specificeren we de opslagtabel voor de geneste tabel.

U kunt verwijzen naar de video-tutorial waarin ik stapsgewijs het bovenstaande proces voor het maken van tabellen heb uitgelegd.

Rijen invoegen in de tabel

INSERT INTO my_subject (sub_id, sub_name, sub_schedule_day)
VALUES (101, 'Maths', my_nested_table('mon', 'Fri'));

U voegt rijen in de geneste tabel in op dezelfde manier als u in de normale tabel invoegt. Om echter gegevens in de kolom van het geneste tabeltype in te voegen, moet u eerst de naam van de geneste tabel schrijven, wat in ons geval 'my_nested_table' is (zie stap 2) en vervolgens de gegevens schrijven volgens het gegevenstype van uw geneste tabel en zet het tussen haakjes.

Gegevens ophalen uit de tabel

Een eenvoudige SELECT DML-instructie kan worden gebruikt om de gegevens uit de tabel op te halen.

SELECT * FROM my_subject;

Deze eenvoudige DML-instructie toont u alle gegevens die zijn opgeslagen in de tabel die we hierboven hebben gemaakt. Om de gegevens van een specifieke rij te zien, kunt u de WHERE-clausule gebruiken met SELECT DML

SELECT * FROM my_subject WHERE sub_id = 101;

Als je wilt, kun je een subquery gebruiken om de gegevens te controleren uit de kolom die je hebt gedefinieerd als geneste tabeltype.

SELECT * FROM TABLE (
  SELECT sub_schedule_day FROM my_subject WHERE sub_id = 101
);

De bovenstaande zoekopdracht toont u alleen de gegevens van het onderwerp met onderwerp-id 101 uit de kolom sub_schedule_day. In deze query hebben we de TABLE-expressie gebruikt om de instantie te openen en de gegevens in relationele indeling weer te geven.

Gegevens van de tabel bijwerken

U kunt ofwel alle waarden van de kolom bijwerken die u als geneste tabel definieert, of u kunt een enkele instantie daarvan bijwerken.

Update alle waarden van de geneste tabeltypekolom.

UPDATE my_subject SET sub_schedule_day = my_nested_table('Tue', 'Sat') 
WHERE sub_id = 101;
/

De bovenstaande query werkt alle waarden van sub_schedule_day bij van 'Ma', 'Fri' naar 'Tue' en 'Sat'. Stel nu dat u slechts één exemplaar van deze kolom wilt bijwerken door 'za' te vervangen door 'do'. Hoe ga je dat doen?

Eén exemplaar van geneste tabel bijwerken

Om een ​​enkele instantie van geneste tabeltypekolom bij te werken, kunt u opnieuw de hulp van TABLE-expressie gebruiken.

UPDATE TABLE
  (SELECT sub_schedule_day FROM my_subject 
  WHERE sub_id = 101) A
SET A.COLUMN_VALUE   = 'Thur' 
WHERE A.COLUMN_VALUE = 'Sat';

De bovenstaande query werkt de waarde bij van 'Sat' naar 'Thur' in de tabel.

Ik hoop dat je het leuk vond om te lezen en iets nieuws hebt geleerd. Zorg ervoor dat je je abonneert op ons kanaal, want er zijn veel van dergelijke interessante tutorials onderweg. Bedankt &een fijne dag!


  1. gebruik van rownum-functie met> log in oracle

  2. Afbeeldingen uploaden naar de MySQL-database met behulp van PHP-code

  3. MySQL-fout omzeilen Deadlock gevonden bij het proberen te vergrendelen; probeer de transactie opnieuw te starten

  4. Recordtellingen voor alle tabellen in de MySQL-database ophalen