ヘッダーをスキップ

Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド リリース6.0 B25770-01 |
| 目次 | 索引

前へ | 次へ |

## CURDATEのエミュレート

ODBC関数のCURDATEはサポートされていません。

##### 例9.5

システム・コールを使用して、この関数と同様の機能をアプリケーションで実現できます。次に例を示します。

    #include <time.h>
    #include <stdio.h>

    /* Function curdate returns current date in YYYY-MM-DD string
      format */
    /* datebuf is assumed to point to a buffer of at least 11 bytes*/
     char * curdate(char *datebuf)
     {
       struct tm *timestamp;
       time_t curtimestamp = time((time_t*)0);
       timestamp = localtime_r(&curtimestamp);

       sprintf(datebuf, "%04d-%02d-%02d",
    	  timestamp->tm_year+1900, timestamp->tm_mon+1,
     timestamp->tm_mday);
       return datebuf;
    }

    CURDATEはサポートされていませんが、ODBCの現在の日時のスカラー関数であるNOWはサポートされています。NOWから戻されるTIMESTAMP値を変換してTO_DATEに渡すことによってCURDATEと同様の処理を実現するだけでなく、ODBCプログラム内でNOW関数をコールできます。

    TimesTenのTO_DATEでは、DATE型ではなくTIMESTAMP型を戻します。

    NOW関数をコールするには、次のような構文を使用します。

    --(*vendor(Microsoft),product(ODBC) FN NOW() *)--

    または、次の構文を使用することもできます。

    {FN NOW()}

    ODBC SQLGetInfo関数をコールすることによって、NOWがサポートされていることをアプリケーションで確認できます。次に例を示します。

    rc =  SQLGetInfo(hdbc, SQL_TIMEDATE_FUNCTIONS, (PTR)&fFuncs,
     sizeof(fFuncs), NULL);
    if (fFuncs & SQL_FN_TD_NOW)
    	printf("NOW function is supported.\n");
      else
     printf("NOW function is not supported.\n");