1

次の例のように、varchar2 型への日付変換に問題があります。

TABLE TEST

Name  Type          Nullable Default Comments 
----- ------------- -------- ------- -------- 
DESCR VARCHAR2(100) Y                         
DATA  DATE          Y                         
DATA2 VARCHAR2(500) Y  


execute immediate 'ALTER SESSION SET NLS_DATE_FORMAT = ''DD/MM/YYYY HH:MI:SS AM''';
DELETE FROM TEST;
INSERT INTO TEST SELECT 'SOME TEXT', SYSDATE, TO_CHAR(SYSDATE,'DD/MM/YYYY HH:MI:SS AM') FROM DUAL;   


1 SOME TEXT "19/03/2015 12:05:45" "28/12/1393 12:05:45 TARDE"

to_char を varchar2 フィールドに変換する SYSDATE をテーブルに挿入すると、日付は28/12/1393.

4

2 に答える 2

0

以下は私にとってはうまくいきます(クライアント11.2.0.2を使用して11.2.0.2で):

column descr format a12
column data2 format a30

create table test (descr varchar2(100),
                   data date,
                   data2 varchar2(500));

begin
  execute immediate 'ALTER SESSION SET NLS_DATE_FORMAT = ''DD/MM/YYYY HH:MI:SS AM''';
end;
/

DELETE FROM TEST;

INSERT INTO TEST SELECT 'SOME TEXT', SYSDATE, TO_CHAR(SYSDATE,'DD/MM/YYYY HH:MI:SS AM') FROM DUAL;   

commit;

select * from test;

drop table test;

選択は次を返します。

DESCR        DATA                   DATA2                         
------------ ---------------------- ------------------------------
SOME TEXT    19/03/2015 12:17:00 PM 19/03/2015 12:17:00 PM        

同じテスト ケースを実行して、select が実際に正しく返されないことを確認できますか?

また、Oracle db のバージョンと Oracle クライアントのバージョンは何ですか?

ETA: ふと思ったのですが、varchar2 列の日付を更新するトリガーがテーブルにありませんね。

于 2015-03-19T16:22:24.303 に答える