DB2在条件语句中调用存储过程

时间:2016-03-03 09:21:47

标签: stored-procedures db2

我需要查询存储过程,并根据该过程的结果集需要在条件语句中做出决定

例如,我有一个存储过程“Main_SP”

现在,如果“Main_SP”的结果为“null”,则结果应为“Tweety”,但如果结果集不为null,则应检索结果集,

怎么做?

我试过跟随和其他一些但没有工作。

SELECT  
  case Main_SP('MyVariable') 
     when 'null' 
        then 'Tweety' end      
  FROM SYSIBM.SYSDUMMY1 WITH UR

SELECT  
   case Main_SP('MyVariable') 
     when null 
       then 'Tweety' end      
    FROM SYSIBM.SYSDUMMY1 WITH UR

条件失败,在第一个命令中,即使它是'null',它也不会打印'Tweety'。

并且在使用秒时,获取'Null'的错误在上下文中无效。

2 个答案:

答案 0 :(得分:0)

我不相信你可以这样使用存储过程。

存储过程可以以两种方式返回数据

  1. 作为结果集
  2. 在输出或输入/输出parm中
  3. 您没有使用选项2,我认为结果集不会为NULL。可能没有记录,但RS本身不是NULL。此外,根据我在手册中看到的,从DB2中另一个存储过程中的存储过程处理RS需要您声明一个分配结果集定位器。但我从来没有这样做过。

    如果您的过程返回单个值或null,则可以通过将其定义为具有返回值的函数来获得更好的服务。然后你的代码就是:

    SELECT  
      COALESCE(Main_Fnc('MyVariable'),'Tweety')
    FROM 
         SYSIBM.SYSDUMMY1 WITH UR
    

答案 1 :(得分:0)

您无法将存储过程作为SQL全查询的一部分进行调用;您需要让调用存储过程的客户端处理此逻辑。如果必须在服务器上执行此操作,请实现一个新的存储过程,该过程本身调用Main_SP并包含解释结果的逻辑。