2016-03-03 84 views
0

我需要查询一个存储过程和结果的基础上设定程序上需要做出的决定在条件语句DB2调用存储过程在条件语句

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

现在如果“Main_SP”的结果为'null',那么结果应该是'Tweety',但是如果th结果集不为空,那么结果集应该被检索,

怎么办?

我试过下面的一些但没有工作。

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 

它是失败的条件,在第一个命令时,即使它是'空'它不打印'Tweety'。

虽然使用第二个,但在上下文中出现'Null'无效的错误。

+0

...好吧,你有哪些,'null'或'NULL'?第一个是一个字符串(包含小写字'null'),第二个是没有任何价值。你可以比较'WHEN'中的字符串(或等号),但是必须通过'IS NULL'/'IS NOT NULL'来比较空值。 –

+0

Main_SP是存储过程还是UDF? –

+0

@IanBjorhovde在db2中存储过程。 –

回答

0

我不相信你可以用这种方式使用存储过程。

存储过程可以通过两种方式

  1. 结果集
  2. 在输出或输入/输出PARM

您没有使用选项2和我不返回数据认为结果集永远是NULL。可能没有记录,但RS本身不是NULL。另外,从手册中我可以看到,处理来自DB2中另一个存储过程的存储过程的RS需要您声明分配结果集定位器。但我从来没有这样做过。

如果你的过程返回一个单值或null,你最好通过将它定义为一个带有返回值的函数来实现。那么你的代码将是简单的:

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

我只是作为一个例子使用'null',我的意思是要求这个比较不会根据这些结果返回想要的结果,我需要在该条件语句中使用select查询.... BTW Store Procedure实际返回String如果没有数据值,则为'null'。 –

0

你不能调用存储过程作为SQL全选的一部分;你需要让调用存储过程的客户端处理这个逻辑。如果您必须在服务器上执行此操作,请实施一个新的存储过程,该存储过程本身会调用Main_SP并包含用于解释结果的逻辑。