【问题标题】:DB2 calling stored Procedure in conditional statementDB2 在条件语句中调用存储过程
【发布时间】:2016-03-03 09:21:46
【问题描述】:

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

例如我有一个存储过程“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”在上下文中无效的错误。

【问题讨论】:

  • ...嗯,你有哪个,'null'NULL?第一个是一个字符串(包含类似的小写单词'null), and the second is the absence of any value whatsoever. You can compare strings in the WHEN'(或等于),但必须通过IS NULL/IS NOT NULL比较空值。
  • Main_SP 是存储过程还是 UDF?
  • @IanBjorhovde db2 中的存储过程。

标签: stored-procedures db2


【解决方案1】:

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

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

  1. 作为结果集
  2. 在输出或输入/输出参数中

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

如果您的过程返回单个值或 null,最好将其定义为具有返回值的函数。那么你的代码就是:

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

【讨论】:

  • 我以'null'为例,我的意思是要求这种比较不会根据这些结果返回所需的结果,我需要在该条件语句中使用选择查询......顺便说一句,如果没有数据值,存储过程实际上会返回 String 'null'。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多