PL/SQL Topics
What do you want to learn? Pick a topic — each one gets a focused answer with a code example, not a wall of everything at once.
Don't see your topic? Ask Oracle directly.
Language Basics
Variables and Data TypesConstants and %TYPE / %ROWTYPEIF and CASELoops (Basic, WHILE, FOR)Nested Blocks and LabelsGOTO and CONTINUEBlock Structure and CommentsBOOLEAN and Three-Valued LogicPLS_INTEGER, BINARY_INTEGER and SIMPLE_INTEGERUser-Defined SUBTYPEsThe NULL StatementIdentifier Scope and QualificationPL/SQL RecordsExpressions and Operator Precedence
String & Data Functions
SUBSTR and INSTRREPLACE and TRANSLATETRIM, LPAD, RPADRegular ExpressionsTO_CHAR, TO_DATE, TO_NUMBERNVL, NVL2, COALESCE, NULLIFTO_CHAR, TO_DATE and TO_NUMBER Format ModelsDate Arithmetic FunctionsSYSDATE vs SYSTIMESTAMPTIMESTAMP and INTERVAL TypesEXTRACT and Date PartsROUND and TRUNCLISTAGGCASE Expressions and DECODE
Cursors & Bulk Operations
Explicit CursorsCursor FOR LoopsCursor Attributes (%FOUND, %ROWCOUNT)Parameterized CursorsREF Cursors (Strong vs. Weak)BULK COLLECTFORALLBULK COLLECT with LIMITSAVE EXCEPTIONS in FORALLImplicit vs Explicit CursorsFOR UPDATE and WHERE CURRENT OFReturning Result Sets with SYS_REFCURSORFORALL with INDICES OF and VALUES OFBULK COLLECT INTO a Collection of RecordsCursor FOR Loop Record Variable
Packages & Modularity
Package Spec vs. BodyProcedures vs. FunctionsIN, OUT, IN OUT ParametersOverloadingPackage-Level (Global) VariablesPackage Initialization BlocksForward DeclarationsPRAGMA SERIALLY_REUSABLELocal (Nested) SubprogramsDefault Parameters and Named NotationShared Constants, Types and Cursors in a Package SpecRecursive Subprograms
Triggers
BEFORE vs. AFTER TriggersRow-Level vs. Statement-LevelINSTEAD OF TriggersCompound TriggersMutating Table ErrorsDML, DDL and Database Event Triggers:NEW and :OLD PseudorecordsThe Trigger WHEN ClauseTrigger Ordering with FOLLOWS and PRECEDESEnabling and Disabling TriggersTrigger Firing Order for One Statement