Und alternativ kann man den SQL auch in eine Variable packen und den Order by dann dynamisieren.
Open/Fetch/Close bleiben dabei identisch.
Parameter werden mit ? definiert und per Using beim Open/execute angegeben.

An Stelle des Select Into kann man dann Cursor nehmen oder per "Values (...) into ?" verwenden.

Übrigens Limit und Offset sind durchaus performancemäßig schlecht. Auch hier bietet sich alternativ ein "Scrollable Cursor" an, der statisch ist, also nur die Daten zum Openzeitpunkt nimmt, oder dynamisch sein kann.
Dann kann man per Fetch next/fetch prior/fetch relative seine Seitensteuerung durchführen.