diff --git a/src/interfaces/ecpg/ecpglib/cursor.c b/src/interfaces/ecpg/ecpglib/cursor.c
index ae67bfe8e0..133d62321b 100644
--- a/src/interfaces/ecpg/ecpglib/cursor.c
+++ b/src/interfaces/ecpg/ecpglib/cursor.c
@@ -150,20 +150,23 @@ ECPGclose(const char *cursor_name,
 
 	con = ecpg_get_connection(real_connection_name);
 
-	/* check the existence of the cursor in the connection */
-	if (find_cursor(cursor_name, con) == false)
-	{
-		ecpg_raise(lineno, ECPG_INVALID_CURSOR, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, NULL);
-		return false;
-	}
-
+	/* send the query to backend */
 	va_start(args, query);
 
 	status = ecpg_do(lineno, compat, force_indicator, real_connection_name, questionmarks, st, query, args);
 
 	va_end(args);
 
-	remove_cursor(cursor_name, con);
+	/* if it fails, raise an error */
+	if (!status)
+	{
+		ecpg_raise(lineno, ECPG_INVALID_CURSOR, ECPG_SQLSTATE_ECPG_INTERNAL_ERROR, NULL);
+		return false;
+	}
+
+	/* check the existence of the cursor in the connection */
+	if (find_cursor(cursor_name, con) == true)
+		remove_cursor(cursor_name, con);
 
 	return status;
 }
