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

Stored procedures DB2在条件语句中调用存储过程,stored-procedures,db2,Stored Procedures,Db2,我需要查询一个存储过程,并根据该过程的结果集在条件语句中做出决策 例如,我有一个存储过程“Main_SP” 现在,如果“Main_SP”的结果为“null”,则结果应为“Tweety”,但如果结果集不为null,则应检索结果集 怎么做 我试着跟随其他人,但没有一个奏效 SELECT case Main_SP('MyVariable') when 'null' then 'Tweety' end FROM SYSIBM.SYSDUMMY1 WI

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

例如,我有一个存储过程“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”


在使用second时,得到的错误是“Null”在上下文中无效。

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

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

  • 结果集
  • 在输出或输入/输出参数中
  • 你没有使用选项2,我也不认为结果集是空的。可能没有记录,但RS本身不是空的。此外,从我在手册中看到的情况来看,在DB2中的另一个存储过程中处理一个存储过程中的RS需要声明一个allocate结果集定位器。但我从来没有这样做过

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

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

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

    …那么,您有哪一个,
    'null'
    null
    ?第一个是字符串(包含小写单词'null
    ),第二个是没有任何值。当`like that(或equals)时,您可以比较
    中的字符串,但是空值必须通过
    IS NULL
    /
    IS NOT NULL
    进行比较。
    Main\u SP
    是db2中的存储过程还是UDF?@ianbjorhode存储过程。我使用了`NULL'作为示例,我的意思是要求这个比较不会在这些结果的基础上返回所需的结果,我需要在条件语句中使用select查询。。。。顺便说一句,若并没有数据值,存储过程实际上会返回字符串“null”。