DBMS_OUTPUTはDISPLAYです。したがって、DATEを表示するには、 TO_CHARが必要です。
STV_FROM_DATEBCKUP:=to_date(STV_FROM_DATE_BC,'DD:MM:YY:HH24:MI:SS'); dbms_output.put_line(STV_FROM_DATEBCKUP);
絶対にYYを使用しないでください。完全な年には常に 4 桁のYYYYを指定してください。Y2Kバグを再び導入したくありません。上記では、日付値を表示しようとしていますが、表示するフォーマット モデルについて言及していません。したがって、TO_CHAR を適切なフォーマット モデルとともに使用するだけです。
理由適切な形式モデルを提供しないと、クライアントはロケール固有の NLS 設定に従って表示されるだけです。たとえば、sysdate のみを表示すると、 v$parametersのNLS_DATE_FORMATに記載されている形式が表示されます。
SQL> select parameter, value from v$nls_parameters where parameter='NLS_DATE_FORMAT';
PARAMETER VALUE
-------------------- --------------------
NLS_DATE_FORMAT DD-MON-RR
SQL> select sysdate from dual;
SYSDATE
---------
27-JAN-15
SQL>
したがって、27-JAN-15
私の NLS_DATE_FORMAT はDD-MON-RR
. システムレベルまたはセッションレベルで設定できます。
SQL> alter session set NLS_DATE_FORMAT='DD:MM:YYYY:HH24:MI:SS';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
27:01:2015:11:54:07
SQL>
したがって、自分NLS_DATE_FORMAT
に合った形式モデルを設定するように設定できます。テストケースを見てみましょう -
SQL> set serveroutput on
SQL> DECLARE
2 STV_FROM_DATE_BC VARCHAR2(20);
3 STV_FROM_DATEBCKUP DATE;
4 BEGIN
5 STV_FROM_DATEBCKUP:= NULL;
6 STV_FROM_DATE_BC :='01:JAN:2000:';
7 STV_FROM_DATE_BC :=STV_FROM_DATE_BC||'00:00:00';
8 dbms_output.put_line('Input date literal = '||STV_FROM_DATE_BC);
9 STV_FROM_DATEBCKUP:=to_date(STV_FROM_DATE_BC,'DD:MON:YYYY:HH24:MI:SS');
10 dbms_output.put_line('Date without format model = '||STV_FROM_DATEBCKUP);
11 dbms_output.put_line('Date with proper format model = '||TO_CHAR(STV_FROM_DATEBCKUP,'DD:MM:YYYY:HH24:MI:SS'));
12 END;
13 /
Input date literal = 01:JAN:2000:00:00:00
Date without format model = 01-JAN-00
Date with proper format model = 01:01:2000:00:00:00
PL/SQL procedure successfully completed.
SQL>