Один из способов справиться с этим - использовать переменные индикатора.Это выглядит следующим образом:
dcl-ds hs Qualified;
field1 ...
field2 ...
endds;
dcl-s hsind Int(5) Dim(2);
exec sql
select *
into :hs:hsind
from table
fetch first row only;
Обратите внимание, что между: hs и: hsind нет запятой (,), поскольку это является частью одного и того же присвоения переменной.: hsind - переменная индикатора, и в этом случае это массив Int(5)
с тем же количеством элементов, что и у структуры данных хоста: hs имеет поля.Переменная индикатора будет содержать 0, если значение в соответствующем поле в: hs хорошее, или -1, если оно нулевое.Итак, в нашем примере выше: если hs.field1 - это хорошо, а hs.field2 - это ноль, то hsind (1) = 0 и hsind (1) = -1.Другие значения означают другие вещи, такие как ошибка отображения данных (-2) или усечение строки (положительное число с исходной длиной строки).
Так что в вашем примере используйте что-то вроде этого:
select
t1.*
,t2.*
into
:dst1:dst1ind
,:dst2:dst2ind
from table1 t1
left join table2 t2 on t2.key=t1.key
;
Где dst1ind
- массив, если Int (5) с тем же количеством элементов, что и dst1
, имеет подполя, аналогично для dst2ind
.Затем после вашего выбора просто отметьте dst2ind(1) >= 0
, и у вас есть хороший выбор.Обратите внимание, что вам нужно убедиться, что select into
возвращает только одну строку, иначе вы получите ошибки об этом.