【问题标题】:Running a function in postgresql Throwing a runtime error在 postgresql 中运行函数引发运行时错误
【发布时间】: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


【解决方案1】:

这是一团糟。而且它肯定不会像您声称的那样编译。

VARCHAR2NUMBER 无效 data types in Postgres

TM_STARTTM_END 应该是 timestamptimestamptz,而不是 date

P_IS_DEBUG 应该是boolean

您的INSERT 语句应该有一个目标列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 2018-07-11
    • 2012-09-06
    相关资源
    最近更新 更多