Packages are good. I like writing package specifications. It’s like laying out your blueprint for world domination.
%TYPE and %ROWTYPE are good. More reflection generally would be better. Generics would be the coolest.
It’s good that there’s a distinction between FUNCTIONs and PROCEDUREs…and downright weird that, having made that distinction, the language allows functions to have side-effects, requiring you to add PRAGMAs indicating which ones are referentially transparent (and hence safe to use from SQL) . It seems that the meaning of the distinction in PL/SQL amounts to “procedures can’t have return values”. Which, given that they can have output parameters, is surely neither here nor there.
It’s good that PL/SQL is verbose, crufty, convoluted and frustratingly difficult to learn, because that means that being able to do it is worth more money. Oops, did I just say that out loud?