Thanks @Robert_LeClair! Your note about ST_INTERSECTION() gave me an idea about finding the problem row.
In an SQL query, I wrote a custom function that uses ST_INTERSECTS() to check if each feature can be used in a spatial SQL operation. If there is an error, then the function returns "error" to the query's resultset. That let me flag the problem row.
Stack Overflow: Find row with problem shape (SDE.ST_GEOMETRY spatial type)
with function check_shape(anno_shape sde.st_geometry, boundary_shape sde.st_geometry) return varchar2
is
v_test_result varchar2(10);
begin
select
sde.st_intersects (boundary_shape, anno_shape)
into
v_test_result
from
dual;
return 'no error';
exception
when others then
return 'error';
end;
select
anno.objectid,
anno.shape as anno_shape,
check_shape(anno.shape, boundary.shape) as check_shape
from
city.boundary boundary
cross join
infrastr.gcsm_hc_anno anno
where
check_shape(anno.shape, boundary.shape) = 'error'
Related: ST_GEOMETRY SQL function to find problem annotation shapes