1. What are composite data types in Oracle?
Composite data types store multiple values in a single variable.
Main types:
· RECORD
· Associative Array
· Nested Table
· VARRAY
Each has different best-use scenarios.
2. When should I use RECORD?
✅ Best Practices
· Use for single-row structures
· Use when passing grouped parameters to procedures/functions
·
Use %ROWTYPE to match table
structure
· Keep record definitions close to usage
❌ Avoid
· Using RECORD for multi-row storage
·
Repeating table column definitions manually (use %ROWTYPE)
Example
DECLARE emp_rec employees%ROWTYPE;BEGIN SELECT * INTO emp_rec FROM employees WHERE employee_id = 100;END;
3. When should I use Associative Arrays?
✅ Best Practices
· Use for lookup tables or caching
· Use when fast key-based access is required
·
Use EXISTS before
accessing element
·
Clear large arrays using DELETE when no longer
needed
❌ Avoid
· Using in SQL queries (PL/SQL only)
· Storing extremely large datasets unnecessarily
Example Pattern
TYPE emp_map IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER;emp_cache emp_map;
4. When should I use Nested Tables?
✅ Best Practices
· Use for bulk operations
·
Use with BULK COLLECT and FORALL
· Initialize before use
· Use for collections stored in DB columns
· Trim or delete unused elements
❌ Avoid
· Row-by-row processing inside loops
· Storing huge collections in memory unnecessarily
Recommended Pattern
SELECT employee_idBULK COLLECT INTO v_emp_idsFROM employees; FORALL i IN v_emp_ids.FIRST .. v_emp_ids.LAST UPDATE employees SET salary = salary * 1.1 WHERE employee_id = v_emp_ids(i);
5. When should I use VARRAY?
✅ Best Practices
· Use for small, fixed-size collections
· Use when order matters
· Define reasonable maximum size
· Use for limited multi-value columns (e.g., phone numbers)
❌ Avoid
· Using for large datasets
· Frequent insert/delete operations
· Dynamic size requirements
6. What are general best practices for composite types?
1️⃣ Choose the Right Type
|
Requirement |
Best Type |
|
Single row grouping |
RECORD |
|
Key-based lookup |
Associative Array |
|
Bulk SQL processing |
Nested Table |
|
Small ordered list |
VARRAY |
2️⃣ Optimize Performance
·
Use BULK COLLECT instead of
row-by-row
·
Use FORALL for bulk DML
· Avoid SQL inside loops
· Minimize context switching
3️⃣ Manage Memory Carefully
· Delete large collections when done
· Avoid loading entire large tables unnecessarily
· Monitor PGA usage in high-load systems
4️⃣ Use Strong Typing
·
Use %TYPE and %ROWTYPE
· Avoid hardcoding data types
· Prevent datatype mismatch errors
5️⃣ Handle Exceptions
·
Check COUNT before
accessing elements
·
Use EXISTS for associative
arrays
·
Handle NO_DATA_FOUND and SUBSCRIPT_BEYOND_COUNT
7. What are common mistakes to avoid?
· Using VARRAY for large dynamic datasets
· Not initializing nested tables
· Forgetting to delete large collections
· Fetching row-by-row instead of bulk
· Accessing non-existing collection index
·
Hardcoding data types instead of %TYPE
8. Best practice for high-performance PL/SQL
✔ Combine:
· Nested Table
· BULK COLLECT
· FORALL
✔ Avoid:
· Loop + single DML statements
✔ Use:
· Associative Arrays for caching
· RECORD for structured row handling
9. Enterprise-level recommendation
In real-world production systems:
· Use RECORD for row representation
· Use Associative Arrays for session-level caching
· Use Nested Tables + FORALL for batch processing
· Use VARRAY only for limited fixed attributes
No comments:
Post a Comment