如何在DB2存储过程中将变量传递到动态SQL语句的SELECT列表?

时间:2019-05-29 21:12:29

标签: db2-400

我用声明的变量EFFDT Varchar(10)创建了DB2-400存储过程。该变量的值应该传递给同一存储过程中的SQL语句。该过程可以正常编译,但是当我执行该过程时,我得到

  

SQL-0206错误“未找到列或全局变量@EFFDT”。

代码如下:

BEGIN 
-- Variable used to replace effective in SQL below with 1st 
-- day of current month as text in 'MM/DD/YYYY' format

DECLARE     EFFDT VARCHAR(10);

SET EFFDT = VARCHAR_FORMAT(MONTH(CURRENT DATE) || '/01/' || YEAR(CURRENT DATE),'MM/DD/YYYY') ;  -- First day of current month


    ...

--SQL STATEMENT
CREATE TABLE INFOMATICS.TEMP_CHGS_2_ADDS AS 
  (SELECT FNAME, MI, LNAME, MAILING_ZIP,
          SPECLTY, SPECLTY_DESC, @EFFDT AS EFF_DATE 
     FROM INFOMATICS.TEMP_CHGS) WITH DATA;

    ...
End;

我希望看到

John M Smith 1111 GD General Dentist 05/01/2019

2 个答案:

答案 0 :(得分:0)

看来@EFFDT既没有定义为声明,也没有定义为参数。我知道您在哪里声明EFFDT。也许尝试将@EFFDT更改为EFFDT

答案 1 :(得分:0)

我最终没有使用该变量。相反,我编写了一条SQL UPDATE语句以将生效日期(EFF_DATE)修改为当前月份的第一天。这是SQL UPDATE语句: UPDATE INFOMATICS.TEMP_CHGS SET EFF_DATE = VARCHAR_FORMAT(MONTH(CURRENT DATE)||‘/ 01 /’|| YEAR(CURRENT DATE),’MM / DD / YYYY');

返回的EFF_DATE值与预期的'05 / 01/2019'。