Mit select ... into :xDatenSQL ... nutzt du ja eine Host-Variable (xDatenSQL) innerhalb deiner SQL Anweisung. Das geht nur, wenn du eine "echte" SQL-Anweisung hast (also statisches SQL). Wenn du dynamisches SQL machst, hast du ja erstmal keine echte SQL-Anweisung mehr, sondern einen String, der später interpretiert wird. Da kann er die Hostvariablen dann nicht mehr erkennen. Deshalb ist der Cursor notwendig.