Oracle DB
VerifiedWrite Oracle SQL and PL/SQL with proper syntax, hints, and performance patterns.
$ Add to .claude/skills/ About This Skill
Syntax Differences
- `ROWNUM` for limiting rows—`WHERE ROWNUM <= 10`; 12c+ supports `FETCH FIRST 10 ROWS ONLY`
- `DUAL` table for expressions—`SELECT sysdate FROM dual`
- `VARCHAR2` not `VARCHAR`—VARCHAR is reserved, VARCHAR2 is the standard
- String concatenation with `||`—not CONCAT for multiple values
- Empty string equals NULL—`'' IS NULL` is true; breaks logic from other databases
Pagination
- ROWNUM assigned before ORDER BY—wrap in subquery: `SELECT * FROM (SELECT ... ORDER BY x) WHERE ROWNUM <= 10`
- Offset requires nested subquery: `SELECT * FROM (SELECT a.*, ROWNUM rn FROM (...) a WHERE ROWNUM <= 20) WHERE rn > 10`
- 12c+: `OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY`—cleaner, use when available
NULL Handling
- `NVL(col, default)` for null replacement—faster than COALESCE for two args
- `NVL2(col, if_not_null, if_null)` for conditional—common Oracle pattern
- Empty string is NULL—`LENGTH('')` returns NULL, not 0
- `NULLIF(a, b)` returns NULL if equal—useful for avoiding division by zero
Dates
- `SYSDATE` for current datetime—no parentheses
- `TO_DATE('2024-01-15', 'YYYY-MM-DD')` for string to date—format required
- `TO_CHAR(date, 'YYYY-MM-DD HH24:MI:SS')` for date to string
- Date arithmetic in days—`SYSDATE + 1` is tomorrow, `SYSDATE + 1/24` is one hour
Sequences
- Create: `CREATE SEQUENCE seq_name START WITH 1 INCREMENT BY 1`
- Get next: `seq_name.NEXTVAL`—`SELECT seq_name.NEXTVAL FROM dual`
- Current value: `seq_name.CURRVAL`—only after NEXTVAL in same session
- 12c+: identity columns—`GENERATED ALWAYS AS IDENTITY`
Hierarchical Queries
- `CONNECT BY PRIOR child = parent` for tree traversal
- `START WITH parent IS NULL` for root nodes
- `LEVEL` pseudo-column shows depth—`WHERE LEVEL <= 3` limits depth
- `SYS_CONNECT_BY_PATH(col, '/')` builds path string
Bind Variables
- Always use bind variables—literals cause hard parse every time
- PL/SQL: `:variable_name` syntax
- Performance critical—literal values fill shared pool, cause contention
- `CURSOR_SHARING=FORCE` as workaround but not recommended long-term
Hints
- `/*+ INDEX(table idx_name) */` forces index use
- `/*+ FULL(table) */` forces full table scan
- `/*+ PARALLEL(table, 4) */` enables parallel query
- Hints inside `SELECT /*+ hint */`—common placement after SELECT keyword
PL/SQL Blocks
- Anonymous block: `BEGIN ... END;` with `/` on new line to execute
- `DBMS_OUTPUT.PUT_LINE()` for debug output—`SET SERVEROUTPUT ON` first
- Exception handling: `EXCEPTION WHEN OTHERS THEN`—always handle or log
- `EXECUTE IMMEDIATE 'sql string'` for dynamic SQL—beware injection
Transactions
- No auto-commit by default—must `COMMIT` explicitly
- `SAVEPOINT name` then `ROLLBACK TO name` for partial rollback
- DDL auto-commits—`CREATE TABLE` commits any pending transaction
- `SELECT FOR UPDATE WAIT 5` waits 5 seconds for lock—avoids indefinite hang
Performance
- `EXPLAIN PLAN FOR sql; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)`—shows plan
- `V$SQL` and `V$SESSION` for monitoring—requires privileges
- Avoid `SELECT *`—fetches all columns including LOBs
- Index hint when optimizer chooses wrong—`/*+ INDEX(t idx) */`
Common Traps
- `MINUS` instead of `EXCEPT`—Oracle uses MINUS for set difference
- `DECODE` is Oracle-specific—use CASE for portability
- Implicit type conversion—`WHERE num_col = '123'` works but prevents index use
- `ROWID` is physical—don't store or rely on across transactions
Use Cases
- Write Oracle-specific SQL with proper syntax for ROWNUM, DUAL, VARCHAR2, and NULL handling
- Implement pagination queries using both legacy ROWNUM and 12c+ FETCH FIRST patterns
- Build hierarchical queries using CONNECT BY PRIOR for tree traversal
- Optimize Oracle queries with hints for index usage, parallel execution, and full table scans
- Write PL/SQL blocks with proper exception handling, dynamic SQL, and transaction management
Pros & Cons
Pros
- +Covers Oracle-specific gotchas that trip up developers coming from PostgreSQL or MySQL
- +Practical performance tips including explain plan usage, bind variables, and V$ monitoring views
- +Concise reference format makes it quick to look up syntax differences during development
Cons
- -Reference-only skill — does not execute queries or connect to databases
- -No coverage of Oracle-specific features like Materialized Views, partitioning, or RAC
FAQ
What does Oracle DB do?
Write Oracle SQL and PL/SQL with proper syntax, hints, and performance patterns.
What platforms support Oracle DB?
Oracle DB is available on Claude Code, OpenClaw.
What are the use cases for Oracle DB?
Write Oracle-specific SQL with proper syntax for ROWNUM, DUAL, VARCHAR2, and NULL handling. Implement pagination queries using both legacy ROWNUM and 12c+ FETCH FIRST patterns. Build hierarchical queries using CONNECT BY PRIOR for tree traversal.
100+ free AI tools
Writing, PDF, image, and developer tools — all in your browser.
Next Step
Use the skill detail page to evaluate fit and install steps. For a direct browser workflow, move into a focused tool route instead of staying in broader support surfaces.