プロが教える店舗&オフィスのセキュリティ対策術

PL/SQLでのDATE型の取扱いについて教えてください。

初期化パラメータNLS_DATE_FORMATが'YY-MM-DD'で、
ある列を'YYYY/MM/DD HH24:MI:SS'形式でDBにINSERTしたい場合、
dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS');
としてINSERTにdtWorkEndDateを用いると、
YY-MM-DD形式でDBに登録されてしまいます。
(dtWorkEndDateはDATE型。)

ORACLEの設定かPL/SQLの問題なのかわからないのですが、
なにかアドバイスを頂けないでしょうか。
よろしくお願いします。

A 回答 (2件)

q=2142210 No.3でも指摘されてますが、


execute immediate文を使ってるのが、悪さしてるのでは。

dtWorkEndDate := to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS');
INSERT INTO テーブル名 VALUES ( dtWorkEndDate );

――みたいに、単純な書き方で済むはずですが。

この回答への補足

やはりexecute immediateの中でシングルクォートを
用いていたのが良くなかったようです。

INSERT INTO テーブル名 VALUES to_date(charWorkEndDate, 'YYYY/MM/DD HH24:MI:SS')
とし、to_dateを文字列で渡してやることにより
問題解決致しました。

ありがとうございました。

補足日時:2006/05/11 11:18
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

execute文等に不備は無く、データ確認の際のこちらの知識不足でした。

ありがとうございました。

お礼日時:2006/05/11 09:33

DBにどんな形式で日付が格納されているかを


どのように確認していますか?
例えば CREATE TABLE worktable (end_date date);
というテーブルなら
SQL*Plusで
SQL> SELECT * from worktable;
としただけではNLS_DATE_FORMATが効いてしまうので
SQL> SELECT to_char(end_date, 'yyyy/mm/dd hh24:mi:ss') from worktable;
とするか
SQL> alter session set nls_date_format='yyyy/mm/dd hh24:mi:ss');
SQL> SELECT end_date from worktable;
とする必要がありますね。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

今まではデータをSI Object Browserで確認していたのですが、
OracleのEnterprise Managerで確認したところ、
時刻もINSERTされていました。

データ確認の際にNLS_DATE_FORMATが影響することに
気付きませんでした。
ありがとうございました。

お礼日時:2006/05/11 09:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!