2009-04-22 38 views
1

目前負責將Informix ESQLC文件遷移到Oracle Pro * C,並且有幾個問題。首先,我們在嵌入式ESQLC代碼中使用了許多專有的Informix功能,如rstrdate(),rtoday()rjulmdy()將Informix ESQLC遷移到Oracle Pro * C

任何有關如何在Oracle Pro * C中轉換這些指針的指針?

我很難理解的另一件事是Oracle日期數據類型。在Informix中,對於處理Informix表日期的任何主機變量,我們在嵌入式SQL C代碼中使用long類型。

但是在甲骨文中,我的印象是日期不會像往常一樣來回傳遞,而是作爲字符?或者我們仍然可以將long變量指定爲long類型嗎?

回答

0

谷歌搜索「甲骨文OCI日期」想出了對應ESQL/C函數,你的名字,如OCIDateTimeFromText()OCIDateSysdate()也許OCIDateTimeToArray()功能。有一個OCIDate類型可能與ESQL/C dtime_t(它可能包含時間組件)比Informix DATE(ESQL/C中的int4或long)更接近,但它很可能與您應該使用的類型你的翻譯過程。

+0

感謝喬納森。我會做更多的研究,但絕對不是在公園散步。從我讀過的內容來看,實現OCI功能在Informix到Oracle的遷移中引入了比我所希望的更多的手動工作。 事實是,我們只用數據類型長期應對在我們的C代碼,日期,因爲這是Informix的工作。但是,現在瓦特/甲骨文我假設我們會從數據庫中的所有作爲操作字符/字符串中提取日期? – KNewton 2009-05-04 13:50:37

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; 
}