Wofür denn eigentlich diesen Umweg?
Die Reihenfolge Declare/Prepare ist letztlich egal, da ja ein Declare nur eine Compiler-Anweisung ist.
Entscheidend ist, dass zum Zeitpunkt des tatsächlichen Zugrffes alles da sein muss.

Nachteil dieses Vorgehens:
Der Cursor C1 gilt für die gesamte Verbindung/Sitzung.
Solange der Cursor nicht geschlossen ist, kannst du kein neues Resultset anfordern!
Dies sei zu bedenken.

Zu bemerken ist das manchmal bei embedded SQL, dass ggf. bei einem Absturz des Programmes, Cursor nicht geöffnet werden können da sie noch offen sind.

Für Übungszwecke ganz i.O.