Db2 400 如何将变量传递给动态SQL语句';DB2存储过程中的选择列表?

Db2 400 如何将变量传递给动态SQL语句';DB2存储过程中的选择列表?,db2-400,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 D

我使用声明的变量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

似乎未将
@EFFDT
定义为声明或参数。我知道您在哪里声明了
EFFDT
。可能尝试将
@EFFDT
更改为
EFFDT

似乎
@EFFDT
既没有定义为声明,也没有定义为参数。我知道您在哪里声明了
EFFDT
。可能尝试将
@EFFDT
更改为
EFFDT

我最终没有使用该变量。相反,我编写了一条SQL UPDATE语句,将生效日期(EFF_date)修改为当月的第一天。下面是SQL UPDATE语句: 更新INFOMATICS.TEMP_CHGS SET EFF_DATE=VARCHAR_格式(月(当前日期)|'/01/|年(当前日期),'MM/DD/YYYY')


返回的EFF_DATE值与预期值一样为“2019年1月5日”。

我最终没有使用该变量。相反,我编写了一条SQL UPDATE语句,将生效日期(EFF_date)修改为当月的第一天。下面是SQL UPDATE语句: 更新INFOMATICS.TEMP_CHGS SET EFF_DATE=VARCHAR_格式(月(当前日期)|'/01/|年(当前日期),'MM/DD/YYYY')


返回的EFF_日期值如预期的“2019年1月5日”。

我感谢您的建议。我尝试将“@EFFDT”更改为EFFDT以匹配声明的变量名,但返回错误消息SQL0312-EFFDT未定义或不可用。类似地,我尝试更改SQL语句“@EFFDT”中声明的变量名及其引用。我再次收到相同的SQL0312错误消息。我感谢您的建议。我尝试将“@EFFDT”更改为EFFDT以匹配声明的变量名,但返回错误消息SQL0312-EFFDT未定义或不可用。类似地,我尝试更改SQL语句“@EFFDT”中声明的变量名及其引用。我再次收到相同的SQL0312错误消息。