【问题标题】:Migrating Informix ESQLC to Oracle Pro*C将 Informix ESQLC 迁移到 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 类型吗?

【问题讨论】:

    标签: oracle informix embedded-sql


    【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-19
      • 2018-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多