从Oracle到Postgres的日期兼容功能

时间:2018-11-14 18:00:39

标签: oracle postgresql

我正在尝试将以下定义转换为Postgres。

当前的Oracle代码:

PROCEDURE Run_All (inDate DATE DEFAULT SYSDATE) IS

在Postgres中,我使用了不同的版本:

  1. CREATE OR REPLACE FUNCTION ssp2_pcat.gen_fios_xml$run_all
       (indate timestamp(0) DEFAULT CURRENT_DATE)
    
  2. CREATE OR REPLACE FUNCTION ssp2_pcat.gen_fios_xml$run_all
       (indate timestamp without timezone DEFAULT ('now'::text)::date)
    
  3. CREATE OR REPLACE FUNCTION ssp2_pcat.gen_fios_xml$run_all
       (indate date DEFAULT ('now'::text)::date)
    
  4. CREATE OR REPLACE FUNCTION ssp2_pcat.gen_fios_xml$run_all
       (indate timestamp(0) DEFAULT CURRENT_TIMESTAMP::timestamp(0))
    

但是仍然会引发如下错误:

ERROR:  column "timestamp" does not exist
LINE 1: SELECT TIMESTAMP
               ^
QUERY:  SELECT TIMESTAMP
CONTEXT:  PL/pgSQL function "gen_fios_xml$run_all"(date) line 13 during statement block local variable initialization
SQL state: 42703

什么是正确的转换方式,我在Postgres中缺少什么吗?任何更新都非常感激!

1 个答案:

答案 0 :(得分:1)

该错误不在显示的函数部分中,而是在SELECT语句中函数主体的第13行中。

您的函数签名应该可以工作,但是如果您需要Oracle DATE的小时到秒部分,那么完美的翻译应该是:

CREATE FUNCTION ssp2_pcat.gen_fios_xml$run_all
    (indate timestamp(0) without time zone DEFAULT localtimestamp(0))