目前负责将Informix ESQLC文件迁移到Oracle Pro * C并提出一些问题。首先,我们在嵌入式ESQLC代码中使用了许多专有的Informix函数,例如rstrdate()
,rtoday()
和rjulmdy()
。
有关如何在Oracle Pro * C中转换这些内容的任何指示?
我正在努力理解的另一件事是Oracle日期数据类型。在Informix中,我们在嵌入式sql C代码中使用long类型来处理任何处理Informix表日期的主机变量。
但是在Oracle中,我的印象是日期不是来回传递的,而是作为char?或者我们仍然可以将主变量指定为long类型吗?
答案 0 :(得分:0)
谷歌搜索“Oracle OCI日期”提供了与您命名的ESQL / C函数相对应的OCIDateTimeFromText()
,OCIDateSysdate()
和OCIDateTimeToArray()
等函数。有一个OCIDate
类型可能更接近于ESQL / C dtime_t
(它可能包括时间组件)而不是Informix DATE(int4或ESQL / C中的long),但它最多可能是您在翻译过程中应该使用的类型。
答案 1 :(得分: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/pass@dbname";
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;
}