2009-04-22 12 views
1

Momentan sind Sie mit der Migration von Informix ESQLC-Dateien zu Oracle Pro * C beauftragt und haben einige Fragen. Zuerst verwenden wir viele proprietäre Informix-Funktionen in unserem eingebetteten ESQLC-Code wie rstrdate(), rtoday() und rjulmdy().Migrieren von Informix ESQLC zu Oracle Pro * C

Gibt es irgendwelche Hinweise, wie Sie diese in Oracle Pro * C konvertieren?

Eine andere Sache, die ich mit Verständnis zu kämpfen habe, ist der Oracle-Datums-Datentyp. In Informix verwenden wir in unserem eingebetteten SQL-C-Code den Typ long für alle Hostvariablen, die sich mit Datumsangaben für die Informix-Tabellen befassen.

Aber in Oracle habe ich den Eindruck, dass Daten nicht so lange hin und her kommuniziert werden, sondern als char? Oder können wir noch Hostvariablen als Typ long angeben?

Antwort

0

Googeln "Oracle OCI Date" kommt mit Funktionen wie OCIDateTimeFromText(), OCIDateSysdate() und vielleicht OCIDateTimeToArray() entsprechend den ESQL/C-Funktionen, die Sie nennen. Es gibt einen OCIDate Typ, der wahrscheinlich eher einem ESQL/C dtime_t entspricht (er enthält wahrscheinlich die Zeitkomponenten) als ein Informix DATE (int4 oder lang in ESQL/C), aber es ist höchstwahrscheinlich der Typ, in dem Sie verwenden sollten Ihr Übersetzungsprozess.

+0

Dank Jonathan. Ich werde noch etwas recherchieren, aber es ist definitiv kein Spaziergang im Park. Nach dem, was ich gelesen habe, führt die Implementierung der OCI-Funktionalität viel mehr manuelle Arbeit in die Migration von Informix zu Oracle ein, als ich mir erhofft hatte. Fakt ist, dass wir nur lange mit Datentyp in unserem C-Code nach Datumsangaben arbeiten, denn das ist es, wofür Informix arbeitet. Aber jetzt w/Oracle nehme ich an, dass wir Daten aus der Datenbank alle als char/string für die Manipulation extrahieren würden? – KNewton

0

einfach auf die oben hinzuzufügen, habe ich eine Methode erstellt Informix proprietäre Funktion rtoday zu duplizieren():

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