アプリ版:「スタンプのみでお礼する」機能のリリースについて

cプログラムにてoracleのあるテーブルのdate型カラムに値をinsertしたいのですが、
'YYYY/MM/DD hh:mm:ss'の情報を格納するにはどうすればよいのでしょうか?
TO_DATEを使用するのでしょうか?

A 回答 (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");
だけで済んじゃいます。
    • good
    • 0

こんにちわ。


#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 のレジストリの場所についてはちょっと自信が無いけど)
    • good
    • 0
この回答へのお礼

すみません。実際はunix-cにてプログラミングしており、ホスト変数に値を格納しています。
その際、arrには"to_date('2002/12/26 12:30:30', 'YYYY/MM/DD HH24:MI:SS') "を格納するのでしょうか?
その際のlenは何を設定すればよいのでしょうか?

お礼日時:2002/12/26 13:14

こんにちわ。



現在日時と言う事であれば、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 した方が良いと思います。
    • good
    • 0
この回答へのお礼

文字列としてホスト変数に格納したいのですが、
以下のようにテストするとエラーとなってしまいます。
update table set tmpdate = '2002/12/26 12:30:30' where id='0000'

お礼日時:2002/12/26 10:14

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

関連するカテゴリからQ&Aを探す