将 Informix ESQLC 迁移到 Oracle Pro*C
Posted
技术标签:
【中文标题】将 Informix ESQLC 迁移到 Oracle Pro*C【英文标题】:Migrating Informix ESQLC to Oracle Pro*C 【发布时间】:2009-04-22 13:48:21 【问题描述】:目前的任务是将 Informix ESQLC 文件迁移到 Oracle Pro*C 并且有几个问题。首先,我们在嵌入式 ESQLC 代码中使用了很多专有的 Informix 函数,例如 rstrdate()
、rtoday()
和 rjulmdy()
。
关于如何在 Oracle Pro*C 中转换这些的任何指针?
我正在努力理解的另一件事是 Oracle 日期数据类型。在 Informix 中,我们在嵌入式 sql C 代码中对处理 Informix 表的日期的任何主变量使用 long 类型。
但在 Oracle 中,我的印象是日期不是来回传达的,而是 char?或者我们仍然可以将主机变量指定为 long 类型吗?
【问题讨论】:
【参考方案1】:谷歌搜索“Oracle OCI 日期”会找到与您命名的 ESQL/C 函数相对应的函数,例如 OCIDateTimeFromText()
、OCIDateSysdate()
和 OCIDateTimeToArray()
。有一个 OCIDate
类型可能更接近于 ESQL/C dtime_t
(它可能包括时间组件)而不是 Informix DATE(ESQL/C 中的 int4 或 long),但它很可能是您的类型应该在您的翻译过程中使用。
【讨论】:
谢谢乔纳森。我要做更多的研究,但这绝对不是在公园里散步。从我读到的很少内容来看,实现 OCI 功能在 Informix 到 Oracle 的迁移中引入了比我希望的更多的手动工作。事实是,我们只处理 C 代码中日期的 long 数据类型,因为这就是 Informix 的运作方式。但是现在有了 Oracle,我假设我们将从数据库中提取所有日期作为 char/string 进行操作?【参考方案2】:为了补充以上内容,我创建了一个复制 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;
【讨论】:
以上是关于将 Informix ESQLC 迁移到 Oracle Pro*C的主要内容,如果未能解决你的问题,请参考以下文章