A cursor is a SELECT statement defined in PL/SQL code that points to an allocated memory area called the context area containing information needed to process rows returned by a query. Cursors are declared, opened to initialize the result set, rows are fetched from the result set into variables, and then the cursor is closed. There are explicit cursors defined and named by the user, and implicit cursors that Oracle handles automatically for DML statements. Cursor attributes provide information like whether a row was found, the number of rows affected, and whether a cursor is open.