ACIEnvNlsCreate()

ACIEnvNlsCreate()

作用:

分配并初始化ACI环境句柄

语法:

sword ACIEnvNlsCreate(ACIEnv **envhpp,
                      ub4 mode,
                      const void *ctxp,
                      const void *(*malocfp)
                                              (void *ctxp,
                                              size_t size),
                      const void *(*ralocfp)
                                              (void *ctxp,
                                              void *memptr,
                                              size_t newsize),
                      const void(*mfreefp)
                                              (void *ctxp,
                                              void *memptr)),
                      size_t xtramemsz,
                      void **usrmempp,
                      ub2             charset,
                      ub2             ncharset);

参数:

  • envhpp (out)

指向环境句柄的指针。

  • mode (in)

初始化模式,取值如下:

ACI_DEFAULT:缺省模式

ACI_THREADED:多线程模式。在这种模式下,不暴露给用户的内部数据结构在多线程访问中被保护。

  • 其他 -- 其他参数目前不使用,仅与Oracle OCI兼容
  • charset (IN)

当前环境句柄的客户端字符集。 如果为0,则使用NLS_OSCAR_LANG设置。 ACI_UTF16ID是有效设置; 元数据和CHAR数据使用它。

  • ncharset (IN)

当前环境句柄的客户端国家字符集。 如果为0,则使用NLS_OSCAR_LANG设置。 ACI_UTF16ID是有效设置; NCHAR数据使用它。

返回值:

ACI_SUCCESS-环境句柄已成功创建。

ACI_ERROR-发生错误。

说明:

使用ACIEnvNlsCreate()创建环境句柄之后,绑定和定义句柄的实际长度以及返回的长度始终以字节数表示。 这适用于以下调用:

此函数允许您在创建环境时设置charset和ncharset id。它是 ACIEnvCreate 函数的增强版本。

必须使用零或全部非零的charset和ncharset调用 ACIEnvNlsCreate 。 否则会导致错误(ORA-24820)。

此函数将非零charset和ncharset设置为客户端数据库和国家字符集,替换由NLS_OSCAR_LANG和NLS_OSCAR_LANG指定的字符集。 当charset和ncharset为0时,该函数的行为与 ACIEnvCreate 完全相同。 具体来说,charset控制元数据和具有隐式格式属性的数据的编码,而ncharset控制具有SQLCS_NCHAR格式属性的数据的编码。

尽管可以通过 ACIEnvNlsCreate 设置ACI_UTF16ID,但不能在NLS_OSCAR_LANG或NLS_OSCAR_LANG中设置它。 要访问NLS_OSCAR_LANG和NLS_OSCAR_LANG中的字符集ID,请使用 ACINlsEnvironmentVariableGet

此调用返回一个环境句柄,然后由其余的ACI函数使用。 ACI中可以有多个环境,每个环境都有自己的环境模式。 如果任何模式需要,此功能还可以执行任何进程级别的初始化。 例如,如果要将环境初始化为ACI_THREADED,则ACI使用的所有库也将在线程模式下初始化。