我是PL / SQL的新手并且有这个问题。
我使用以下规范创建了一个过程:
PROCEDURE runschedule (i_RunDate IN DATE)
此i_RunDate
具有特定格式,我需要将其更改为以下格式:
'MM/dd/yyyy hh:mi:ss PM'
我找不到如何重新格式化Date变量。
答案 0 :(得分:4)
您需要使用TO_CHAR
功能。这是一个例子:
SELECT TO_CHAR(CURRENT_TIMESTAMP, 'MM/DD/YYYY HH12:MI:SS AM') FROM dual;
答案 1 :(得分:3)
DATE没有特定格式,DATE是DATE。当存储在数据库列中时,日期值包括从午夜开始的以秒为单位的时间,并且DATE变量具有相同的值,仅在某些时候显示变量的格式。 PL / SQL可以隐式转换值的数据类型,例如,可以将CHAR值'02 -JUN-92'转换为DATE值..但我不建议您依赖此隐式转换。我总是使用显式转换。 有关此主题的更多信息,您可以阅读: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/datatypes.htm#i9118
在您的情况下,如果您想格式化DATE以记录某些内容,或者以不同的格式显示在您的UI或监视器中,您需要将其分配给varchar变量,就像Justin所说的那样:
....
v_generated_run_date DATE;
v_var_date VARCHAR2(30);
BEGIN -- generate sysdate if required
IF (i_RunDate is null)
THEN
v_var_date:=TO_CHAR(sysdate, 'MM/DD/YYYY HH12:MI:SS AM');
ELSE
v_var_date:=TO_CHAR(i_RunDate,'MM/DD/YYYY HH12:MI:SS AM');
END IF;
pkgschedule.createschedule (v_var_date);
commit;
END runschedule;
END
在这种情况下,您的createdchedule过程将具有varchar2参数...