- ベストアンサー
date型へのinsertについて
cプログラムにてoracleのあるテーブルのdate型カラムに値をinsertしたいのですが、 'YYYY/MM/DD hh:mm:ss'の情報を格納するにはどうすればよいのでしょうか? TO_DATEを使用するのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちわ。 #1 のmuyoshid です。 > arrには"to_date('2002/12/26 12:30:30', 'YYYY/MM/DD HH24:MI:SS') "を > 格納するのでしょうか? > その際のlenは何を設定すればよいのでしょうか? ホスト変数のarr に、"2002/12/16 12:30:30" が指定されていれば、 len には、arr の文字列長を指定します。 実際には確認していませんが、Pro*C でのプログラムはこんな感じです。 EXEC SQL INCLUDE SQLCA; main() { EXEC SQL BEGIN DECLARE SECTION; VARCHAR2 vDate[32]; VARCHAR2 vLogin[32]; EXEC SQL END DECLARE SECTION; strcpy(vLogin.arr, "scott/tiger"); vLogin.len = strlen(vLogin.arr); EXEC SQL CONNECT :vLogin; if (sqlca.sqlcode < 0) { printf("Connection Error.\n"); exit(1); } strcpy(vDate.arr, "2002/12/26 12:30:30"); vDate.len = strlen(vDate.arr); EXEC SQL Update test set tmpdate = to_date(:vDate, 'YYYY/MM/DD HH24:MI:SS') where id = '0000'; if (sqlca.sqlcode < 0) { printf("Update Error.\n"); exit(1); } EXEC SQL COMMIT WORK; if (sqlca.sqlcode < 0) { printf("Commit Error.\n"); exit(1); } exit(0); } でも実際にプログラムする時には、ホスト変数の設定は マクロでやってしまう事が多いです。 #define VSET(_h,_s) srtcpy(_h.arr, _s); _h.len = strlen(_s) としておけば、 VSET(vLogin, "scott/tiger"); だけで済んじゃいます。
その他の回答 (2)
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 #1 のmuyoshid です。 > update table set tmpdate = '2002/12/26 12:30:30' > where id='0000' と言う事であれば、解決策としては 1) to_date で変換する。 2) 事前にAlter session で日付書式を変更する。 3) デフォルトの日付書式を変更する。 の何れかになります。 1) の場合、 update table set tmpdate = to_date('2002/12/26 12:30:30', 'YYYY/MM/DD HH24:MI:SS') where id='0000' 2) の場合、 Alter session set nls_date_format = 'YYYY/MM/DD HH24:MI:SS' を実行 3) の場合、 Windows 環境であれば、 \\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0\ に、NLS_DATE_FORMAT と言うキーを作成してキーの値に YYYY/MM/DD HH24:MI:SS を指定 Unix/Linux 環境の場合、 環境変数 NLS_DATE_FORMAT に'YYYY/MM/DD HH24:MI:SS' を指定 になると思います。 (Windows のレジストリの場所についてはちょっと自信が無いけど)
- muyoshid
- ベストアンサー率72% (230/318)
こんにちわ。 現在日時と言う事であれば、SYSDATE が使えます。 SQL*Plus 等で、DATE 型データを取り出した場合、時間情報 がマスクされていますので、事前に SQL> Alter session set nls_date_format = 'YYYY/MM/DD HH24:MI:SS'; とされておくと良いと思います。 > YYYY/MM/DD hh:mm:ss'の情報を格納するにはどうすれば > よいのでしょうか? > TO_DATEを使用するのでしょうか? 時間のフォーマットは、'HH24:MI:SS' が良いです。 hh -> 12時間制です。 mm -> 月です。 文字列として、変数に格納されている値をInsert する場合 デフォルト書式と一致していれば、to_date で変換する必要は ありませんが、デフォルト書式に依存しないようにするため、 to_date した方が良いと思います。
お礼
文字列としてホスト変数に格納したいのですが、 以下のようにテストするとエラーとなってしまいます。 update table set tmpdate = '2002/12/26 12:30:30' where id='0000'
お礼
すみません。実際はunix-cにてプログラミングしており、ホスト変数に値を格納しています。 その際、arrには"to_date('2002/12/26 12:30:30', 'YYYY/MM/DD HH24:MI:SS') "を格納するのでしょうか? その際のlenは何を設定すればよいのでしょうか?