sql >> Database >  >> RDS >> Oracle

Hoe een door de gebruiker gedefinieerde recordgegevenstypevariabele in Oracle Database te maken?

Tot nu toe hebben we gezien hoe u tabelgebaseerde en cursorgebaseerde recordgegevenstypevariabelen kunt maken. De enige die overblijft, is het door de gebruiker gedefinieerde recordgegevenstype dat we in de tutorial van vandaag gaan behandelen.

Zoals de naam al doet vermoeden, zijn door de gebruiker gedefinieerde records de recordvariabelen waarvan de structuur wordt gedefinieerd door de gebruiker, in tegenstelling tot de op tabellen of cursors gebaseerde records waarvan de structuren zijn afgeleid van hun respectievelijke tabellen of cursor. Dit betekent dat u met door de gebruiker gedefinieerde records volledige controle heeft over de structuur van uw recordvariabele.

Het aanmaakproces van de door de gebruiker gedefinieerde recordvariabele is verdeeld in twee delen. Voordat we het record definiëren, moeten we eerst het TYPE voor de recordvariabele definiëren. Dit TYPE wordt de basis van de User Define Record-variabele en helpt bij het aansturen van de structuur ervan. Zodra het TYPE met succes is gedeclareerd, kunnen we het gebruiken voor het maken van onze door de gebruiker gedefinieerde recordvariabele.

Syntaxis van door de gebruiker gedefinieerde records in Oracle Database

Hieronder vindt u de syntaxis voor het maken van het TYPE voor de door de gebruiker gedefinieerde recordgegevenstypevariabele.

TYPE type_name IS RECORD (
field_name1 datatype 1,
field_name2 datatype 2,
...
field_nameN datatype N 
);

Zodra we ons TYPE hebben gedeclareerd, zijn we helemaal klaar om onze recordvariabele te maken. Deze variabele krijgt dan alle eigenschappen van het type waarmee hij is gemaakt. En hier is de syntaxis voor het maken van de door de gebruiker gedefinieerde recordgegevenstypevariabele.

record_name TYPE_NAME;

Is het je opgevallen dat we, in tegenstelling tot de op tabel gebaseerde of op cursor gebaseerde recordvariabele, het %ROWTYPE-attribuut hier niet hoeven te gebruiken voor het declareren van de recordvariabele?

Je kunt de video-tutorial op mijn YouTube-kanaal bekijken voor een gedetailleerde uitleg van de bovenstaande syntaxis.

Voorbeeld:hoe u een door de gebruiker gedefinieerde recordgegevenstypevariabele maakt.

Stap 1:Declareer het type voor de door de gebruiker gedefinieerde recordvariabele

SET SERVEROUTPUT ON;
DECLARE
  TYPE rv_dept IS RECORD(
    f_name  VARCHAR2(20),
    d_name  DEPARTMENTS.department_name%TYPE 
  );

Stap 2:Definieer door gebruiker gedefinieerde recordvariabele

Nadat u het TYPE hebt gemaakt, bent u helemaal klaar om uw door de gebruiker gedefinieerde recordvariabele te maken.

var1 rv_dept;

Dit bovenstaande PL/SQL-statement maakt een recordvariabele aan met de naam VAR1.

Stap 3:Initialiseer de door de gebruiker gedefinieerde recordvariabele.

Door de gebruiker gedefinieerde recordvariabele kan op meerdere manieren worden geïnitialiseerd. U kunt de recordvariabele bijvoorbeeld direct initialiseren door er een waarde aan toe te kennen met behulp van de toewijzingsvariabele of u kunt de waarden ophalen die zijn opgeslagen in de kolom van een tabel met behulp van de SELECT-INTO-instructie. Laten we dus verder gaan met ons voorbeeld en leren hoe u een door de gebruiker gedefinieerde recordvariabele initialiseert met behulp van de SELECT-INTO-instructie.

Vervolgens zal ik de uitvoeringssectie schrijven. In de uitvoeringssectie zullen we een SELECT-instructie hebben die zich bij de werknemerstabel en de afdelingentabel voegt en de voornaam en afdelingsnaam van de specifieke werknemer retourneert.

BEGIN
  SELECT first_name , department_name 
  INTO var1.f_name, var1.d_name
  FROM employees  join departments
  Using (department_id) WHERE employee_id = 100; 
  DBMS_OUTPUT.PUT_LINE(var1.f_name||' '||var1.d_name);
END;

De select-instructie die we hier hebben, retourneert de voornaam en de afdelingsnaam van de werknemer wiens werknemers-ID 100 is. De gegevens voor beide kolommen komen uit verschillende tabellen, dus we hebben hier een JOIN gebruikt. Aangezien er twee verschillende tabellen bij de query betrokken zijn, is het gebruik van tabelgebaseerde recordvariabele in een dergelijke situatie niet mogelijk, daarom is de haalbare oplossing de door de gebruiker gedefinieerde recordvariabele.

Laten we alle bovenstaande stukjes codes samenvoegen tot een enkel anoniem PL/SQL-blok.

SET SERVEROUTPUT ON;
DECLARE
  TYPE rv_dept IS RECORD(
    f_name  VARCHAR2(20),
    d_name  departments.department_name%type 
  );
  var1 rv_dept;
BEGIN
  SELECT first_name , department_name 
  INTO var1.f_name, var1.d_name
  FROM employees  join departments
  Using (department_id) WHERE employee_id = 100;
  
  DBMS_OUTPUT.PUT_LINE(var1.f_name||' '||var1.d_name);
END;
/

Zo creëren we een User Defined Record Datatype Variable in Oracle Database. Ik hoop dat je het leuk vond om te lezen en iets nieuws hebt geleerd. Ook geef ik elke maand RebellionRider's merchandise weg aan een willekeurig geselecteerde winnaar, dus zorg ervoor dat je deze blog deelt met je vrienden op je social media.

Dat is alles mensen bedankt en een fijne dag!


  1. Problemen oplossen Microsoft SQL Server-fout 18456

  2. 3 manieren om een ​​geheel getal naar decimaal te converteren in SQL Server

  3. PostgreSQL, bestaande tabel opnieuw configureren, primaire sleutel wijzigen in type=serial

  4. NAMEN INSTELLEN utf8 in MySQL?