我真的需要有人在这里救我。运行以下存储过程时出现此错误:x和y是Date列,z是整数1。我曾经解决过这些错误。但是这个非常执着!我使用所有方法在动态变量周围添加逗号或重新格式化输入日期,但没有一个工作。它的静态查询工作正常。谢谢你的帮助!
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;
答案 0 :(得分:1)
除了CREATE行上的额外右括号外,问题是date1和date2作为文字内置在查询中,但没有引号。
你得到的是“x> 2015-02-04”,这与“其中x&gt; 2009”相同,当你真正想要的是“x&gt;'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||';' ;
答案 1 :(得分:1)
感谢您的回答。但是,我实际上通过添加两个引号解决了这个问题:
where x > '''|| date1 ||''' and y < '''||date2||''' and z < '||item||';'
两个内部引号可以作为日期变量的一个引用和声明的一个引用!