Sql 如果是“选择”;“字符串”;在var1中,WHERE不返回任何行,字符串是否仍然被移动到var1中?

Sql 如果是“选择”;“字符串”;在var1中,WHERE不返回任何行,字符串是否仍然被移动到var1中?,sql,variables,select,Sql,Variables,Select,这是SQLCOBOL程序的一部分,我需要检查数据库中的一些变量,看看主程序是否必须运行作业。默认情况下,我在返回值中输入“Y”,但如果选择返回行,则作业不能运行,因此我在其中输入“N”。我的问题是: 如果选择返回0行(这意味着作业必须运行),它是否仍将“N”移动到:LKG-return?如果是这样,我可以选择什么来实现预期的结果 谢谢。正常的SQL行为是不返回值。但我从未使用过SQLCOBOL来测试这一点。每当我有一点点犹豫的时候,我就去测试 在没有测试功能的情况下,这将始终返回一个值 MOVE

这是SQLCOBOL程序的一部分,我需要检查数据库中的一些变量,看看主程序是否必须运行作业。默认情况下,我在返回值中输入“Y”,但如果选择返回行,则作业不能运行,因此我在其中输入“N”。我的问题是:

如果选择返回0行(这意味着作业必须运行),它是否仍将“N”移动到:LKG-return?如果是这样,我可以选择什么来实现预期的结果


谢谢。

正常的SQL行为是不返回值。但我从未使用过SQLCOBOL来测试这一点。每当我有一点点犹豫的时候,我就去测试

在没有测试功能的情况下,这将始终返回一个值

MOVE "Y"   TO :LKG-RETURN
EXEC SQL                                
    SELECT "N"                          
    INTO :LKG-RETURN              
    FROM SOME_TABLE                      
    WHERE SOME_COLUMN = :SOME_VAR  
END-EXEC.    
或者可能

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

-- 0 = no hits
但是,说真的,你需要找到一种方法来测试你工作环境的发展


我不羡慕你工作的地方有多困难。我希望这对您有用。

不,在我工作的地方设置一个测试需要时间,而这个工作需要大约2小时才能运行,因此我必须确保,在执行测试之前检查并再次检查我的资料。您的工作没有测试/开发环境吗?你不能设置一个测试表,然后在一个很小的数据集上进行测试吗?如果你的代码是完美的,除了一个打字错误怎么办?当然你有一些测试的能力吗?我很幸运地得到了一份从各地收集数据的出色的杂乱的工作,可以调用许多其他工作,但是如果其中一个工作没有收到正确的数据,那么就停止工作。这些工作是在80年代末创建的,当时没有制定标准,到今天,大约50个不同的程序员添加了一些东西。用我自己的数据进行测试大约需要一整天来收集正确的数据。如果我能先测试一下,我就不会在这里问这个问题了。我已经添加了一个答案,这个答案可能对你有用,也可能对你没用。但您不需要针对活动表测试代码:创建一个包含1条记录的表,然后针对该记录进行测试。然而,
CASE WHEN EXISTS
选项在较大的数据集上执行得更快(取决于索引、字段的不连续性等)
SELECT
  CASE WHEN EXISTS (SELECT * FROM SOME_TABLE WHERE SOME_COLUMN = :SOME_VAR)
       THEN 'Y' ELSE 'N' END