如何根据动态SQL的IF-else条件在INFORMIX DB中设置变量
我已经在Informix DB中创建了一个存储过程。它已成功创建,没有任何错误。 并且毫无差错地执行。 唯一的问题是,它并没有意识到我添加的其他条件是否存在 设cust_qry=cust_qry | | |和pt.parameter4='“| | parIn2 | |”” 请帮助我:( 我在编译和执行存储过程方面没有问题,只是即使我将参数1和参数2传递给存储过程,它也不会进入我提到的if条件 如果parIn2!='',则 设cust_qry=cust_qry | | |和pt.parameter4='“| | parIn2 | |”” 所以我的查询应该是dynamix,结果查询应该如下 因为我已经通过了巴黎/巴黎2 从X pt,outer X ps选择pt.parameter1,pt.parameter2,pt.parameter3,pt.parameter4,pt.parameter5,pt.parameter6,其中pt.set_no=ps.set_no和pt.parameter1='“| | | | | |”和pt.parameter4='“| | | parIn2 |”” 但问题是它只给了我一个疑问 从X pt,outer X ps选择pt.parameter1,pt.parameter2,pt.parameter3,pt.parameter4,pt.parameter5,pt.parameter6,其中pt.set_no=ps.set_no和pt.parameter1='“| | parIn | |”如何根据动态SQL的IF-else条件在INFORMIX DB中设置变量,sql,database,stored-procedures,informix,Sql,Database,Stored Procedures,Informix,我已经在Informix DB中创建了一个存储过程。它已成功创建,没有任何错误。 并且毫无差错地执行。 唯一的问题是,它并没有意识到我添加的其他条件是否存在 设cust_qry=cust_qry | | |和pt.parameter4='“| | parIn2 | |”” 请帮助我:( 我在编译和执行存储过程方面没有问题,只是即使我将参数1和参数2传递给存储过程,它也不会进入我提到的if条件 如果parIn2!='',则 设cust_qry=cust_qry | | |和pt.parameter
即使不为null,也不考虑parIn2。请帮助您可以在定义后添加以下两行,以帮助调试过程 将调试文件设置为“/tmp/trace.log”;跟踪打开
请发布trace.log您确定您的参数是空字符串而不是null或空格等吗 如果语句:
CREATE PROCEDURE Table_info
(parIn CHAR(12), parIn2 CHAR(12), parIn3 CHAR(20),parIn4 CHAR(2))
RETURNING CHAR(12) AS paramenter1,CHAR(23) AS parameter2,CHAR(2) AS parameter3,CHAR(12) AS parameter4,CHAR(1) AS parameter5,INTEGER AS parameter6 ;
DEFINE paramenter1 CHAR(12);
DEFINE parameter2 CHAR(22);
DEFINE parameter3 CHAR(2);
DEFINE parameter4 CHAR(12);
DEFINE parameter5 CHAR(1);
DEFINE parameter6 INTEGER;
DEFINE cust_qry CHAR(1024);
LET cust_qry = "select pt.paramenter1,pt.parameter2,pt.parameter3,pt.parameter4,pt.parameter5,pt.parameter6 from X pt, outer X ps where pt.set_no = ps.set_no and pt.paramenter1 = '" || parIn || "' ";
IF parIn2 = '' THEN
LET cust_qry = cust_qry ;
ELSE
LET cust_qry = cust_qry || "and pt.parameter4 = '"|| parIn2 || "' " ;
END IF;
if parIn3 != '' then
LET cust_qry = cust_qry ||"and pt.trd_blk_ref = '"|| parIn3 ||"' " ;
END IF;
if ( parIn4 != '0') then
LET cust_qry = cust_qry ||"and pt.parameter3 = '"|| parIn4 || "' " ;
END IF;
PREPARE stmt_id FROM cust_qry;
DECLARE cust_cur cursor FOR stmt_id;
OPEN cust_cur;
WHILE (1 = 1)
FETCH cust_cur INTO paramenter1, parameter2,parameter3,parameter4,parameter5,parameter6;
if (sqlcode = 100 ) then exit; end if;
RETURN paramenter1,parameter2,parameter3,parameter4,parameter5,parameter6 WITH RESUME ;
end while;
IF parIn2 IS NOT NULL AND TRIM(parIn2) != '' THEN
LET cust_qry = cust_qry || "and pt.parameter4 = '"|| parIn2 || "' " ;
END IF;