Skip to content
geeksforgeeks
  • Courses
    • DSA to Development
    • Get IBM Certification
    • Newly Launched!
      • Master Django Framework
      • Become AWS Certified
    • For Working Professionals
      • Interview 101: DSA & System Design
      • Data Science Training Program
      • JAVA Backend Development (Live)
      • DevOps Engineering (LIVE)
      • Data Structures & Algorithms in Python
    • For Students
      • Placement Preparation Course
      • Data Science (Live)
      • Data Structure & Algorithm-Self Paced (C++/JAVA)
      • Master Competitive Programming (Live)
      • Full Stack Development with React & Node JS (Live)
    • Full Stack Development
    • Data Science Program
    • All Courses
  • Tutorials
    • Data Structures & Algorithms
    • ML & Data Science
    • Interview Corner
    • Programming Languages
    • Web Development
    • CS Subjects
    • DevOps And Linux
    • School Learning
  • Practice
    • Build your AI Agent
    • GfG 160
    • Problem of the Day
    • Practice Coding Problems
    • GfG SDE Sheet
  • Contests
    • Accenture Hackathon (Ending Soon!)
    • GfG Weekly [Rated Contest]
    • Job-A-Thon Hiring Challenge
    • All Contests and Events
  • Databases
  • SQL
  • MySQL
  • PostgreSQL
  • PL/SQL
  • MongoDB
  • SQL Cheat Sheet
  • SQL Interview Questions
  • MySQL Interview Questions
  • PL/SQL Interview Questions
  • Learn SQL and Database
Open In App
Next Article:
Procedures in PL/SQL
Next article icon

PL/SQL Records

Last Updated : 05 Nov, 2024
Comments
Improve
Suggest changes
Like Article
Like
Report

PL/SQL stands for Procedural Language/Structured Query Language. It is an extension of the Structured Query Language (SQL). A core feature of PL/SQL is its ability to work with complex data types, including PL/SQL records. PL/SQL records enable developers to group related data elements, creating a single unit that can be manipulated as a cohesive structure. This approach simplifies data management and enhances code modularity, readability, and maintainability within Oracle’s powerful database system.

In this article, we’ll explore what PL/SQL records are, their types, benefits, and usage through examples to help you efficiently work with structured data in Oracle.

What Are PL/SQL Records?

In PL/SQL, records are structured data types that allow grouping multiple, related data fields under a single name. Records are similar to structures in C, objects in Java, and tuples in Python. Each record has multiple fields, and each field has a data type and a name. Records help developers organize data logically, making it easier to work with and read. Records can be declared at the package, block, or schema level and used in various PL/SQL contexts.

Types of PL/SQL Records

PL/SQL offers different ways to declare and use records. Here’s an overview of the common types:

  1. Table-Based Records: Linked to a table’s row structure, allowing you to work directly with database table columns.
  2. Cursor-Based Records: Derived from a cursor’s query result set, providing a way to process query results one row at a time.
  3. Programmer-Defined Records: User-defined records with custom fields and data types.
  4. Nested Records: Records within records, enabling hierarchical data management

1. Declaring Table-based records

In database systems, it can declare the records using table-based records. Table-based records are the data structures that resemble the tables or rows in a database table. Each record contains the fields i.e. columns with their corresponding values.

Example: Declaring and Using a Table-Based Record

record Human {
id: Integer,
name: String,
age: Integer,
ph_no: Integer
}

In the above example:

Here,

  • The name of the record is 'Human'.
  • 'id', 'name', 'age', and 'ph_no' are the fields of the record.
  • Every field contains its data type such as 'Integer' or 'String' and it indicates the data type.

Now, we are creating instances for this record and inserting the data.

Human1 = Human {
id: 1,
name: "John",
age: 25,
ph_no: 9124567833
}
Human2 = Human {
id: 2,
name: "Amar",
age: 26,
ph_no: 9874567321
}

In databases, records are called rows in a table, and we can interact with them using SQL queries.

Example for creating a table in SQL database to represent the 'Human' record:

CREATE TABLE Human (
id INT PRIMARY KEY,
name VARCHAR (150),
age INT,
ph_no INT
);

After that, we can insert records into the table using SQL 'INSERT' statement:

INSERT INTO Human (id, name, age, ph_no) VALUES (1 , 'John' , 25 , 9124567833) ;
INSERT INTO Human (id, name, age, ph_no) VALUES (2 , 'Amar' , 26 , 9874567321) ;

Output: match

Records1
Output

2. Declaring Cursor-Based Records

In a database management system, a cursor is an object of the database that is used to manipulate the data or retrieve the data row by row, typically within a procedural language like PL/SQL.

Here is an example of records with Cursor-based records:

DECLARE
-- Declare a cursor to fetch data
CURSOR employee_cursor IS
SELECT employee_id, employee_name, salary
FROM employees
WHERE department_id = 10;

-- Declare a record type based on the cursor's query structure
TYPE employee_record_type IS RECORD (
emp_id employees.employee_id%TYPE,
emp_name employees.employee_name%TYPE,
emp_salary employees.salary%TYPE
);

-- Declare a variable of the record type
employee_rec employee_record_type;

BEGIN
-- Open the cursor
OPEN employee_cursor;

-- Fetch data from the cursor and process each record
LOOP
FETCH employee_cursor INTO employee_rec;
EXIT WHEN employee_cursor%NOTFOUND;

-- Process the record (for example, print the values)
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || employee_rec.emp_id || ', Name: ' || employee_rec.emp_name || ', Salary: ' || employee_rec.emp_salary);
END LOOP;

-- Close the cursor
CLOSE employee_cursor;
END;

In the above example:

  • We can declare the cursor as 'employee_cursor', which selects the employee data from the 'employee' table.
  • 'employee_record_type' is defined as a record type to match the structure of data and it will be returned by the cursor.
  • A variable 'employee_rec' of the type 'employee_record_type' is declared inside the 'BEGIN' block.
  • When the cursor is open, the loop iterates with the cursor's data.
  • Data is fetched into the 'employee-rec' variable in the given loop by the programmer and each value is printed.
  • The loop prints the values or records until the records are not found.

3. Programmer-Defined Record (User-Defined)

A programmer-defined record is also called a user-defined record. It is a data structure created by the programmer to store the pieces of data of different types in a single unit. These records are user-defined. these are not predefined records in a programming language or computer system.

These records are defined by the programmer according to the needs of the application. These records are mainly used in programming languages that support the composite data types like structures in C/C++, and classes in Java, Python, and C#.

# Define a programmer-defined record representing a person
class Human:
def __init__(self, name, age, address):
self.name = name
self.age = age
self.address = address

# Create an instance of the Person record
Human1 = Human("Jagan Malla", 30, "Runku Street")

# Access fields of the record
print("Name:", Human1.name)
print("Age:", Human1.age)
print("Address:", Human1.address)

In the above example, 'Human' is the programmer-defined record with the fields of the 'name', 'age', and 'address'. An instance of the 'person1' record will be created with the specific values for each field. This record hides the information about the person into a single object.

Referencing a Record's Field

Referencing a record's field involves accessing or manipulating the individual components of the record variable in PL/SQL. Records in the PL/SQL are equal to the tuples in the Python programming language. These are allowed to the group of data taken under the single variable name.

Here is the example for the reference a record's field in PL/SQL:

Declare the Record: First of all we need to declare the record type based on the user-defined type or structure of the table.

DECLARE
-- Declare a record based on a table structure
TYPE employee_record_type IS RECORD (
emp_id employees.employee_id%TYPE,
emp_name employees.employee_name%TYPE,
emp_salary employees.salary%TYPE
);
-- Declare a record variable
employee_rec employee_record_type;

Access Record Fields: After declaring the record variable, we can access the separated fields using the dot notation.

-- Assign values to the record fields
employee_rec.emp_id := 101;
employee_rec.emp_name := 'John Doe';
employee_rec.emp_salary := 50000;

-- Retrieve values from the record fields
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || employee_rec.emp_id);
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || employee_rec.emp_name);
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || employee_rec.emp_salary);

Manipulate Record Fields: We can also perform the calculations and operations with the record fields.

-- Increase employee salary by 10%
employee_rec.emp_salary := employee_rec.emp_salary * 1.1;

Pass Record as Parameter: Records are passed the parameters to the functions or procedures allowing the work with the structured data with the subprograms.

-- Example of a procedure accepting a record parameter
PROCEDURE print_employee_details(emp_record IN employee_record_type) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_record.emp_id);
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_record.emp_name);
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || emp_record.emp_salary);
END;

Cursor Fetch Into Record: We can retrieve the data from the cursor directly into the variables of the record.

DECLARE
CURSOR emp_cursor IS
SELECT employee_id, employee_name, salary
FROM employees;
emp_rec employee_record_type;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO emp_rec;
CLOSE emp_cursor;
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_rec.emp_id);
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_rec.emp_name);
DBMS_OUTPUT.PUT_LINE('Employee Salary: ' || emp_rec.emp_salary);
END;

Assigning records

Assigning records in PL/SQL involved copying the content from one record variable into another record variable. This process allows the duplicate data stored in the record and it is available for manipulating the data without affecting the original data in the records.

Here is an example for assigning the record variables. we can assign the content of record variables to another record with the help of the assignment operator ( ':= ' ).

 -- Assigning values to fields of emp_rec
emp_rec.emp_id := 101;
emp_rec.emp_name := 'John Doe';
emp_rec.emp_salary := 50000;

-- Assigning emp_rec to emp_rec1
emp_rec1 := emp_rec;

Records with INSERT Statement

In PL/SQL, records are used with INSERT statements is insert data in the database tables. Records are allowed to be organized and manipulate the data in a structured manner. It will make the work with many fields as a single unit.

Here is the example for the INSERT Statement:

DECLARE
-- Define a record type
TYPE employee_record_type IS RECORD (
emp_id employees.employee_id%TYPE,
emp_name employees.employee_name%TYPE,
emp_salary employees.salary%TYPE
);

-- Declare a record variable
emp_rec employee_record_type;

BEGIN
-- Assign values to the record fields
emp_rec.emp_id := 101;
emp_rec.emp_name := 'John Doe';
emp_rec.emp_salary := 50000;

-- Insert data into the employees table using the record
INSERT INTO employees (employee_id, employee_name, salary)
VALUES (emp_rec.emp_id, emp_rec.emp_name, emp_rec.emp_salary);

-- Commit the transaction
COMMIT;
END;
/

Records with UPDATE Statement

In PL/SQL, records are used with UPDATE statements is update the existing data in the database tables. Records are allowed to be organized and manipulate the data in a structured manner. It will make the work with many fields as a single unit.

DECLARE
-- Define a record type
TYPE employee_record_type IS RECORD (
emp_id employees.employee_id%TYPE,
emp_name employees.employee_name%TYPE,
emp_salary employees.salary%TYPE
);

-- Declare a record variable
emp_rec employee_record_type;

BEGIN
-- Assign values to the record fields
emp_rec.emp_id := 101;
emp_rec.emp_name := 'John Doe';
emp_rec.emp_salary := 55000; -- Updated salary

-- Update data in the employees table using the record
UPDATE employees
SET employee_name = emp_rec.emp_name,
salary = emp_rec.emp_salary
WHERE employee_id = emp_rec.emp_id;

-- Commit the transaction
COMMIT;
END;
/



Here, in the above INSERT and UPDATE Statements examples:

  • we can define the record type 'employee_record_type' that matches with the structure of the 'employee' table.
  • A record variable 'emp_rec' is declared as 'employee_record_type'.
  • The values are assigned to the fields of the variables of the record.
  • For the INSERT statement, we can use record fields directly in the values of the table.
  • For the UPDATE statement, we can use record fields to update the corresponding columns in the table.

4. Nested Record

A nested record is nothing but the type of record that is used for the modeling of difficult data structures where the entities have more than one attribute. They helped the organize data hierarchically, will made it easier to manage and manipulate the records within the PL/SQL programs.

Here is the example for the Nested Record:

DECLARE
-- Define a nested record type
TYPE address_record_type IS RECORD (
street_address VARCHAR2(100),
city VARCHAR2(50),
state VARCHAR2(50),
postal_code VARCHAR2(20)
);

TYPE employee_record_type IS RECORD (
emp_id INTEGER,
emp_name VARCHAR2(100),
emp_address address_record_type -- Nested record type
);

-- Declare a record variable
emp_rec employee_record_type;

BEGIN
-- Assign values to the fields of the nested record
emp_rec.emp_id := 101;
emp_rec.emp_name := 'John Doe';
emp_rec.emp_address.street_address := '123 Main St';
emp_rec.emp_address.city := 'New York';
emp_rec.emp_address.state := 'NY';
emp_rec.emp_address.postal_code := '10001';

-- Output the nested record data
DBMS_OUTPUT.PUT_LINE('Employee ID: ' || emp_rec.emp_id);
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || emp_rec.emp_name);
DBMS_OUTPUT.PUT_LINE('Street Address: ' || emp_rec.emp_address.street_address);
DBMS_OUTPUT.PUT_LINE('City: ' || emp_rec.emp_address.city);
DBMS_OUTPUT.PUT_LINE('State: ' || emp_rec.emp_address.state);
DBMS_OUTPUT.PUT_LINE('Postal Code: ' || emp_rec.emp_address.postal_code);
END;
/

In the above example:

  • We can define the two record types i.e. 'address_record_type' and 'employee_record_type'.
  • 'address_record_type' represents the address with the fields of street address, state, city, and postal code.
  • 'employee_record_type' represents the employee with the fields of employee ID, address, and name.
  • We can declare the record variable 'emp_rec' type of 'employee_record_type'.
  • We assign the values to fields of the nested record using the dot notation.
  • At last, the output of the data is stored in the nested record.

Conclusion

PL/SQL records are a powerful construct in Oracle database programming, enabling the management of structured data, improving modularity, and making code maintenance easier. By understanding the various types of records—table-based, cursor-based, programmer-defined, and nested—developers can handle complex data relationships efficiently within Oracle databases. Additionally, these records streamline data manipulation operations, supporting efficient INSERT, UPDATE, and retrieval tasks within PL/SQL blocks.


Next Article
Procedures in PL/SQL
author
jagan716
Improve
Article Tags :
  • PL/SQL
  • Databases

Similar Reads

  • Procedures in PL/SQL
    PL/SQL procedures are reusable code blocks that perform specific actions or logic within a database environment. They consist of two main components such as the procedure header which defines the procedure name and optional parameters and the procedure body which contains the executable statements i
    5 min read
  • Security in PL/SQL
    PL/SQL security is that feature of the Oracle database management where protection of the data is ensured along with proper application interaction with the database. It refers to access control, user privilege administration and secure coding against SQL injection, unauthorized accessing of the dat
    7 min read
  • SQL ORDER BY
    The ORDER BY clause in SQL is a powerful feature used to sort query results in either ascending or descending order based on one or more columns. Whether you're presenting data to users or analyzing large datasets, sorting the results in a structured way is essential. In this article, we’ll explain
    5 min read
  • PL/SQL Operators
    The PL/SQL language offers various operators for data manipulation and logical processing. There are several types of these operators which include arithmetic operators, relational operators, comparison operators, and logical operators. In this guide, we will learn about the various PL/SQL operators
    4 min read
  • SQL FROM keyword
    The SQL FROM keyword is a crucial component of SQL queries, used to specify the table from which data should be selected or manipulated. It plays a vital role in SELECT, DELETE, UPDATE and other DML operations, allowing users to interact with databases effectively. Understanding the FROM keyword is
    5 min read
  • MySQL Cursors
    A MySQL cursor is a powerful database object designed for retrieving, processing, and managing rows from a result set one at a time. Unlike standard SQL queries that handle sets of rows in bulk, cursors allow for detailed row-by-row operations. In this article, We will learn about MySQL Cursors in d
    6 min read
  • sp_columns - SQL Server
    In SQL Server, managing and understanding database schemas is crucial for effective database administration and development. The sp_columns stored procedure is a valuable tool for retrieving detailed metadata about the columns of a specified table or view. In this article, We will learn about sp_col
    6 min read
  • PL/SQL SELECT FROM
    PL/SQL is Oracle procedural extension for SQL which allows for more powerful and flexible database manipulation. The SELECT statement is one of the most fundamental and widely used commands in SQL. It allows users to retrieve data from one or more tables in a database. In this article, we will learn
    5 min read
  • Basic SQL Commands
    Structured Query Language (SQL) is the standard language used for managing and interacting with relational databases. Whether we are retrieving data, updating records, or defining the structure of our data, SQL commands provide a powerful and flexible way to handle these tasks. This article will exp
    6 min read
  • SQL Clauses
    Structured Query Language (SQL) is a powerful language used to manage and manipulate relational databases. One of the essential features of SQL is its clauses, which allow users to filter, sort, group, and limit data efficiently. SQL clauses simplify querying and enhance database performance by retr
    7 min read
geeksforgeeks-footer-logo
Corporate & Communications Address:
A-143, 7th Floor, Sovereign Corporate Tower, Sector- 136, Noida, Uttar Pradesh (201305)
Registered Address:
K 061, Tower K, Gulshan Vivante Apartment, Sector 137, Noida, Gautam Buddh Nagar, Uttar Pradesh, 201305
GFG App on Play Store GFG App on App Store
Advertise with us
  • Company
  • About Us
  • Legal
  • Privacy Policy
  • In Media
  • Contact Us
  • Advertise with us
  • GFG Corporate Solution
  • Placement Training Program
  • Languages
  • Python
  • Java
  • C++
  • PHP
  • GoLang
  • SQL
  • R Language
  • Android Tutorial
  • Tutorials Archive
  • DSA
  • Data Structures
  • Algorithms
  • DSA for Beginners
  • Basic DSA Problems
  • DSA Roadmap
  • Top 100 DSA Interview Problems
  • DSA Roadmap by Sandeep Jain
  • All Cheat Sheets
  • Data Science & ML
  • Data Science With Python
  • Data Science For Beginner
  • Machine Learning
  • ML Maths
  • Data Visualisation
  • Pandas
  • NumPy
  • NLP
  • Deep Learning
  • Web Technologies
  • HTML
  • CSS
  • JavaScript
  • TypeScript
  • ReactJS
  • NextJS
  • Bootstrap
  • Web Design
  • Python Tutorial
  • Python Programming Examples
  • Python Projects
  • Python Tkinter
  • Python Web Scraping
  • OpenCV Tutorial
  • Python Interview Question
  • Django
  • Computer Science
  • Operating Systems
  • Computer Network
  • Database Management System
  • Software Engineering
  • Digital Logic Design
  • Engineering Maths
  • Software Development
  • Software Testing
  • DevOps
  • Git
  • Linux
  • AWS
  • Docker
  • Kubernetes
  • Azure
  • GCP
  • DevOps Roadmap
  • System Design
  • High Level Design
  • Low Level Design
  • UML Diagrams
  • Interview Guide
  • Design Patterns
  • OOAD
  • System Design Bootcamp
  • Interview Questions
  • Inteview Preparation
  • Competitive Programming
  • Top DS or Algo for CP
  • Company-Wise Recruitment Process
  • Company-Wise Preparation
  • Aptitude Preparation
  • Puzzles
  • School Subjects
  • Mathematics
  • Physics
  • Chemistry
  • Biology
  • Social Science
  • English Grammar
  • Commerce
  • World GK
  • GeeksforGeeks Videos
  • DSA
  • Python
  • Java
  • C++
  • Web Development
  • Data Science
  • CS Subjects
@GeeksforGeeks, Sanchhaya Education Private Limited, All rights reserved
We use cookies to ensure you have the best browsing experience on our website. By using our site, you acknowledge that you have read and understood our Cookie Policy & Privacy Policy
Lightbox
Improvement
Suggest Changes
Help us improve. Share your suggestions to enhance the article. Contribute your expertise and make a difference in the GeeksforGeeks portal.
geeksforgeeks-suggest-icon
Create Improvement
Enhance the article with your expertise. Contribute to the GeeksforGeeks community and help create better learning resources for all.
geeksforgeeks-improvement-icon
Suggest Changes
min 4 words, max Words Limit:1000

Thank You!

Your suggestions are valuable to us.

What kind of Experience do you want to share?

Interview Experiences
Admission Experiences
Career Journeys
Work Experiences
Campus Experiences
Competitive Exam Experiences