【问题标题】:Netezza Stored Procedure Date ArgumentNetezza 存储过程日期参数
【发布时间】:2016-05-13 06:02:22
【问题描述】:

我真的需要有人来救我。运行以下存储过程时出现此错误:x 和 y 是日期列,z 是整数一。我曾经解决这些错误。但是这个很执着!我使用了所有在动态变量周围添加逗号或重新格式化输入日期的方法,但没有一种方法有效。它的静态查询工作正常。感谢您的帮助!

 exec SP_DIV_SKU_TIMEFRAME_SALES_V1( 14 ,'2015-02-04','2015-02-15')

 "ERROR [01000] NOTICE:  Error occurred while executing PL/pgSQL function SP_DIV_SKU_TIMEFRAME_SALES_V1

  ERROR [01000] NOTICE:  line 8 at execute statement

  ERROR [HY000] ERROR:  Inconsistent datatypes 'DATE' and 'INT4'"


CREATE OR REPLACE PROCEDURE SP_DIV_SKU_TIMEFRAME_SALES_V1(INT,    date , date))
RETURNS INTEGER
LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
item ALIAS FOR $1;;
date1 ALIAS FOR $2;
date2 ALIAS FOR $3;
sql varchar(30000) ;


BEGIN

sql:='

    create table DEVML_WORK..XxXX as 
     select x, y, z from k
     where x > '|| date1 ||' and y < '||date2||' and z < '||item||';' ;

RAISE NOTICE '%', sql;
Execute immediate sql;


END;
END_PROC;

【问题讨论】:

    标签: sql date stored-procedures dynamic netezza


    【解决方案1】:

    感谢您的回答。但是,我实际上通过添加两个引号解决了这个问题:

      where x > '''|| date1 ||''' and y < '''||date2||''' and z <   '||item||';'
    

    两个内引号相当于一个引号包围日期变量和一个引号!

    【讨论】:

      【解决方案2】:

      除了 CREATE 行上的额外右括号外,问题在于 date1 和 date2 是作为文字内置到查询中的,但没有引号。

      您得到的是“where x > 2015-02-04”,这与“where x > 2009”相同,而您真正想要的是“where x > '2015-02-04'”。

      尝试以下修改,使用 quote_literal 辅助函数。

      sql:='
      
          create table DEVML_WORK..XxXX as 
           select x, y, z from k
           where x > '|| quote_literal(date1) ||' and y < '|| quote_literal(date2) ||' and z < '||item||';' ;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-04
        • 1970-01-01
        • 2011-11-21
        • 2018-01-27
        相关资源
        最近更新 更多