Introduction to Oracle UROWID Data Type
In Oracle, UROWID
is a special data type used to store unique row identifiers, typically used for row-based duplicate and update operations to ensure that the position of rows is not lost in a distributed environment.
Syntax
The UROWID
data type stores a hexadecimal identifier. In Oracle, you can define a column of type UROWID
using the following syntax:
column_name UROWID [NOT NULL]
Use Cases
- Unique Identifier:
UROWID
can uniquely identify each row in a table, making it useful in scenarios where a unique identifier is needed, such as row-based update operations. - Cross-Table Queries:
UROWID
can provide efficient performance in cross-table queries for quickly retrieving data for specified rows. - Distributed Environment:
UROWID
is very useful in distributed environments as it can ensure that each row is uniquely identified across multiple databases.
Examples
Example 1: Using UROWID to Identify Rows in a Table
Create an employees
table:
CREATE TABLE employees (
employee_id NUMBER(6),
first_name VARCHAR2(20),
last_name VARCHAR2(25),
email VARCHAR2(25),
phone_number VARCHAR2(20),
hire_date DATE,
job_id VARCHAR2(10),
salary NUMBER(8,2),
commission_pct NUMBER(2,2),
manager_id NUMBER(6),
department_id NUMBER(4),
row_id UROWID NOT NULL
);
Insert a row of data:
INSERT INTO employees VALUES (100, 'Steven', 'King', '[email protected]', '515.123.4567', TO_DATE('2003-06-17', 'YYYY-MM-DD'), 'AD_PRES', 24000, NULL, NULL, 90, NULL);
Query the data in the table:
SELECT row_id FROM employees WHERE employee_id = 100;
Output:
AABBCCDDAABBCCDDEEFF
Example 2: Using UROWID for Joins between Multiple Tables
CREATE TABLE departments (
department_id NUMBER(4),
department_name VARCHAR2(30),
location_id NUMBER(4),
row_id UROWID NOT NULL
);
INSERT INTO departments VALUES (90, 'Executive', 1700, 'AABBCCDDEEFF112233');
INSERT INTO departments VALUES (60, 'IT', 1400, 'AABBCCDDEEFF445566');
INSERT INTO departments VALUES (30, 'Sales', 2500, 'AABBCCDDEEFF778899');
SELECT e.first_name, e.last_name, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
AND e.row_id = 'AABBCCDDEEFF112233';
Output:
FIRST_NAME LAST_NAME DEPARTMENT_NAME
----------- ---------- ----------------
Steven King Executive
Conclusion
The UROWID
data type provides a unique row identifier for handling row-based duplicate and update operations, and offers efficient performance in cross-table queries and distributed environments.