Если SELECT "string" INTO var1 с WHERE не возвращает строк, переместится ли строка в var1? - PullRequest
0 голосов
/ 24 октября 2011
MOVE "Y"   TO :LKG-RETURN
EXEC SQL                                
    SELECT "N"                          
    INTO :LKG-RETURN              
    FROM SOME_TABLE                      
    WHERE SOME_COLUMN = :SOME_VAR  
END-EXEC.    

Это часть программы на SQLCOBOL, в которой мне нужно проверить некоторую переменную в базе данных, чтобы узнать, должна ли основная программа выполняться или нет. По умолчанию я добавляю «Y» в возвращаемое значение, но если строки возврата возвращаются, задание не должно выполняться, поэтому я добавляю «N». Мой вопрос:

Если select возвращает 0 строк (что означает, что задание должно быть выполнено), оно все еще перемещает «N» в: LKG-RETURN? Если да, какие у меня могут быть варианты для достижения желаемого результата?

Спасибо.

1 Ответ

1 голос
/ 24 октября 2011

Нормальным поведением SQL будет то, что значение НЕ возвращается. но я никогда не использовал SQLCOBOL, чтобы проверить это. И всякий раз, когда у меня есть хоть малейшее колебание, я проверяю.

При отсутствии возможности проверки это всегда будет возвращать значение ...

SELECT COUNT(*)
INTO :LKG-RETURN              
FROM SOME_TABLE                      
WHERE SOME_COLUMN = :SOME_VAR  

-- 0 = no hits

Или, возможно ...

SELECT
  CASE WHEN EXISTS (SELECT * FROM SOME_TABLE WHERE SOME_COLUMN = :SOME_VAR)
       THEN 'Y' ELSE 'N' END

Но, если серьезно, вам нужно найти способ протестировать разработки в вашей рабочей среде.

Я не завидую, как тяжело должно быть там, где ты работаешь. Я надеюсь, что это сработает для вас.

...