Sql Netezza存储过程日期参数

Sql Netezza存储过程日期参数,sql,date,stored-procedures,dynamic,netezza,Sql,Date,Stored Procedures,Dynamic,Netezza,我真的需要有人来救我。我在运行以下存储过程时遇到此错误:x和y是日期列,z是整数列。我过去经常处理这些错误。但这一个是非常持久的!我使用了所有的方法在动态变量周围添加逗号,或者重新格式化输入日期,但都不起作用。这是一个静态查询,工作正常。谢谢你的帮助 exec SP_DIV_SKU_TIMEFRAME_SALES_V1( 14 ,'2015-02-04','2015-02-15') "ERROR [01000] NOTICE: Error occurred while executing

我真的需要有人来救我。我在运行以下存储过程时遇到此错误: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;
  where x > '''|| date1 ||''' and y < '''||date2||''' and z <   '||item||';'
exec SP_DIV_SKU_TIMEFRAME_SALES_V1(14、'2015-02-04'、'2015-02-15')
“错误[01000]注意:执行PL/pgSQL函数SP\u DIV\u SKU\u TIMEFRAME\u SALES\u V1时出错
错误[01000]通知:execute语句第8行
错误[HY000]错误:数据类型“DATE”和“INT4”不一致
创建或替换程序SP_DIV_SKU_时间表_SALES_V1(整数、日期、日期))
返回整数
语言nzplsqlas
开始程序
声明
物品别名为$1;;
date1别名为$2;
date2别名为$3;
sql-varchar(30000);
开始
sql:='
创建表DEVML_WORK..XxXX作为
从k中选择x、y、z
其中,x>“||日期1 | |”和y<”|日期2 | |和z<”|项目| |“;
提出通知“%”,sql;
执行即时sql;
结束;
结束程序;

除了CREATE行上额外的右括号外,问题在于date1和date2作为文本构建到查询中,但没有引号

  where x > '''|| date1 ||''' and y < '''||date2||''' and z <   '||item||';'
您得到的是“where x>2015-02-04”,这与“where x>2009”相同,而您真正想要的是“where x>‘2015-02-04’”

  where x > '''|| date1 ||''' and y < '''||date2||''' and z <   '||item||';'
使用quote_literal helper函数尝试以下修改

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||';' ;
  where x > '''|| date1 ||''' and y < '''||date2||''' and z <   '||item||';'
sql:='
创建表DEVML_WORK..XxXX作为
从k中选择x、y、z
其中x>“| | quote|u literal(date1)| |”和y<”| | quote|u literal(date2)| |”和z<“| | |项|”;

谢谢你的回答。然而,我实际上通过添加两个引号解决了这个问题,如:

  where x > '''|| date1 ||''' and y < '''||date2||''' and z <   '||item||';'
其中x>''日期1''和y<''日期2''和z<''项目| | |'
两个内引号作为一个引号括住日期变量,一个引号括住语句

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