2009-04-22 15 views
1

現在、Informix ESQLCファイルをOracle Pro * Cに移行し、いくつか質問があります。まず、rstrdate(),rtoday()rjulmdy()など、埋め込み型ESQLCコード内に独自のInformix関数を多数使用しています。Informix ESQLCからOracle Pro * Cへの移行

これらをOracle Pro * Cでどのように変換するかについての情報はありますか?

私が理解に苦しんでいるもう一つのことは、Oracleの日付データ型です。 Informixでは、Informixテーブルの日付を扱うすべてのホスト変数に対して、埋め込みSQL Cコードでlong型を使用します。

しかし、Oracleでは、日付が前後に通信されるのではなく、文字として扱われるという印象を受けていますか?あるいは、ホスト変数をlong型として指定することはできますか?

答えて

0

「Oracle OCI Date」の検索では、名前がESQL/Cの機能に対応するOCIDateTimeFromText()OCIDateSysdate()、おそらくOCIDateTimeToArray()などの関数が表示されます。 OCIDateタイプは、おそらくESQL/C dtime_t(時間コンポーネントを含む可能性があります)とInformix DATE(int4またはESQL/Cの長さ)よりも密接に対応していますが、あなたの翻訳プロセス。

+0

おかげでジョナサン。私はもう少し研究をするつもりですが、それは間違いなく公園の散歩ではありません。私が少し読んだところで、OCIの機能を実装することで、InformixからOracleへの移行で、私が望むよりもはるかに多くの手動作業が導入されています。 Informixが動作するので、私たちはC言語の日付のデータ型longを処理しているに過ぎません。しかし、今ではOracleを使用しています。データベースからすべてを操作するためにchar/stringとして日付を抽出すると仮定していますか? – KNewton

0

ただ、上記に追加して、私はInformixの独自の機能rtodayを複製する方法を作成したが():

int rtoday(long *today) { 
    EXEC SQL BEGIN DECLARE SECTION; 
     time_t t; 
    EXEC SQL END DECLARE SECTION; 

    EXEC SQL WHENEVER SQLERROR DO sql_error("Oracle error\n"); 
    EXEC SQL CONNECT :"user/[email protected]"; 
    EXEC SQL SELECT (new_time(sysdate,'EDT','GMT') - to_date('31-dec-1899','dd-mon-yyyy')) INTO :t FROM DUAL; 

    printf("C Time = %d\n", time(NULL)); 
    printf("SQL Time = %d\n", t); 

    *today=t; 
} 
関連する問題