There is no real difference between declaring a cursor in working storage or in procedure division. I remember reading somewhere that when a cursor is declared in procedure division programmers try to validate the sqlcode after that although the value in the sqlcode will the one of the last executed sql statement (prior to the cursor declaration), this may lead to unwanted confusion and hence it is recommended to code the cursor in the working storage.