Install
openclaw skills install oracle-dbWrite Oracle SQL and PL/SQL with proper syntax, hints, and performance patterns.
openclaw skills install oracle-dbROWNUM for limiting rows—WHERE ROWNUM <= 10; 12c+ supports FETCH FIRST 10 ROWS ONLYDUAL table for expressions—SELECT sysdate FROM dualVARCHAR2 not VARCHAR—VARCHAR is reserved, VARCHAR2 is the standard||—not CONCAT for multiple values'' IS NULL is true; breaks logic from other databasesSELECT * FROM (SELECT ... ORDER BY x) WHERE ROWNUM <= 10SELECT * FROM (SELECT a.*, ROWNUM rn FROM (...) a WHERE ROWNUM <= 20) WHERE rn > 10OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY—cleaner, use when availableNVL(col, default) for null replacement—faster than COALESCE for two argsNVL2(col, if_not_null, if_null) for conditional—common Oracle patternLENGTH('') returns NULL, not 0NULLIF(a, b) returns NULL if equal—useful for avoiding division by zeroSYSDATE for current datetime—no parenthesesTO_DATE('2024-01-15', 'YYYY-MM-DD') for string to date—format requiredTO_CHAR(date, 'YYYY-MM-DD HH24:MI:SS') for date to stringSYSDATE + 1 is tomorrow, SYSDATE + 1/24 is one hourCREATE SEQUENCE seq_name START WITH 1 INCREMENT BY 1seq_name.NEXTVAL—SELECT seq_name.NEXTVAL FROM dualseq_name.CURRVAL—only after NEXTVAL in same sessionGENERATED ALWAYS AS IDENTITYCONNECT BY PRIOR child = parent for tree traversalSTART WITH parent IS NULL for root nodesLEVEL pseudo-column shows depth—WHERE LEVEL <= 3 limits depthSYS_CONNECT_BY_PATH(col, '/') builds path string:variable_name syntaxCURSOR_SHARING=FORCE as workaround but not recommended long-term/*+ INDEX(table idx_name) */ forces index use/*+ FULL(table) */ forces full table scan/*+ PARALLEL(table, 4) */ enables parallel querySELECT /*+ hint */—common placement after SELECT keywordBEGIN ... END; with / on new line to executeDBMS_OUTPUT.PUT_LINE() for debug output—SET SERVEROUTPUT ON firstEXCEPTION WHEN OTHERS THEN—always handle or logEXECUTE IMMEDIATE 'sql string' for dynamic SQL—beware injectionCOMMIT explicitlySAVEPOINT name then ROLLBACK TO name for partial rollbackCREATE TABLE commits any pending transactionSELECT FOR UPDATE WAIT 5 waits 5 seconds for lock—avoids indefinite hangEXPLAIN PLAN FOR sql; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY)—shows planV$SQL and V$SESSION for monitoring—requires privilegesSELECT *—fetches all columns including LOBs/*+ INDEX(t idx) */MINUS instead of EXCEPT—Oracle uses MINUS for set differenceDECODE is Oracle-specific—use CASE for portabilityWHERE num_col = '123' works but prevents index useROWID is physical—don't store or rely on across transactions