【发布时间】:2014-08-09 07:28:17
【问题描述】:
当我尝试运行一个返回表的函数时,我遇到了一个神秘的错误,我的函数代码就像
CREATE OR REPLACE FUNCTION FN_JOURNEY_SUMMARY(IN ENTITY INTEGER,
IN VEHICLE VARCHAR2,
IN SDATE VARCHAR2,
IN EDATE VARCHAR2,
IN FLG VARCHAR,
IN P_IS_DEBUG CHAR DEFAULT 'Y')
RETURNS TABLE(TRNNAME VARCHAR2(100),
SASSETID VARCHAR2(50),
DTDATE VARCHAR2(50),
IDAYS NUMBER,
SMOVINGTIME VARCHAR2(30),
SSTOPTIME VARCHAR2(30),
SDISTANCE VARCHAR2(60),
SCUMMDISTANCE VARCHAR2(60),
SAVARAGE VARCHAR2(60),
ICNTR NUMBER)
LANGUAGE PLPGSQL
AS $FUNCTION$
DECLARE
TM_START DATE;
TM_END DATE;
I_ELAPS_TIME NUMBER;
BEGIN
TM_START:= CLOCK_TIMESTAMP();
BEGIN
CREATE TEMPORARY TABLE GTT_V4JOURNEY_SUMM1 (TRN_NAME VARCHAR2(100),
S_ASSET_ID VARCHAR2(50),
DT_DATE VARCHAR2(50),
I_DAYS NUMBER,
S_MOVING_TIME VARCHAR2(30),
S_STOP_TIME VARCHAR2(30),
S_DISTANCE VARCHAR2(60),
S_CUMM_DISTANCE VARCHAR2(60),
S_AVARAGE VARCHAR2(60),
i_cntr number);
EXCEPTION
WHEN OTHERS THEN
DROP TABLE GTT_V4JOURNEY_SUMM1;
CREATE TEMPORARY TABLE GTT_V4JOURNEY_SUMM1 (TRN_NAME VARCHAR2(100),
S_ASSET_ID VARCHAR2(50),
DT_DATE VARCHAR2(50),
I_DAYS NUMBER,
S_MOVING_TIME VARCHAR2(30),
S_STOP_TIME VARCHAR2(30),
S_DISTANCE VARCHAR2(60),
S_CUMM_DISTANCE VARCHAR2(60),
S_AVARAGE VARCHAR2(60),
i_cntr number);
END;
INSERT INTO GTT_V4JOURNEY_SUMM1
SELECT * FROM FN_JOURNEY_SUMM_WEEK(ENTITY,VEHICLE, SDATE,EDATE,P_IS_DEBUG);
IF P_IS_DEBUG = 'Y' THEN
TM_END:=CLOCK_TIMESTAMP();
RAISE NOTICE 'THE START TIME WAS %',TM_START;
RAISE NOTICE 'THE END TIME WAS %',TM_END;
I_ELAPS_TIME:=EXTRACT(MICROSECONDS FROM (TM_END - TM_START))/1000;
RAISE NOTICE 'THE TIME TAKEN IS >>>>>>-------------->>>>>>> %',I_ELAPS_TIME;
END IF;
RAISE NOTICE '*** end of all ***';
RETURN QUERY SELECT * FROM GTT_V4JOURNEY_SUMM1 ;
END $FUNCTION$;
当我运行函数时:
select * from FN_JOURNEY_SUMMARY(100,'NL01L0639','28/03/2014','23/06/2014','W',1);
这是给我一个错误:
invalid input syntax for type timestamp: "28-Mar:28-Mar-14(13)"
它存储到返回表的DTDATE 列中,它是character varying 类型。
但是当我用不同的名字编译同一个函数时,不会抛出任何错误并且运行顺利。
【问题讨论】:
-
您是否尝试命名要插入的列?这是一个很好的做法:
INSERT INTO GTT_V4JOURNEY_SUMM1 (col1, col2...) -
显示完整的错误信息。还有我怀疑发生错误的
FN_JOURNEY_SUMM_WEEK的代码。 -
@ClodoaldoNeto 先生,我已经检查了它的功能是否正常工作,并且没有抛出任何错误
-
运行
\df FN_JOURNEY_SUMMARY以检查是否有多个具有该名称的函数。每个都将接受一组不同的参数。这是我能想到的唯一解释当我用不同的名字编译同一个函数时没有错误抛出 -
总是提供您的 Postgres 版本。另外,完整的逐字错误消息。另外,上面的外壳是怎么回事?你来自甲骨文吗?
标签: function postgresql stored-procedures plpgsql