Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何将列raw(18)重写为informix_Oracle_Informix - Fatal编程技术网

Oracle 如何将列raw(18)重写为informix

Oracle 如何将列raw(18)重写为informix,oracle,informix,Oracle,Informix,在我的应用程序中,我有oracle列: 列名称原始(18)不为空 我应该如何将其重写为informix?我发现类似的类型是byte,但我还需要在此列上创建索引,这在byte上是不允许的(在oracle on raw中,这是可能的)从您的注释来看,您似乎将字节存储在此列中。这些字节创建UUID,在代码中使用十六进制编码的字节 要存储这样的数据,我将使用VARCHAR(36)。在十六进制编码中,每个字节需要两个字符,所以我使用36作为长度(18*2) 在此解决方案中,插入内容不会更改。选择可能也不会

在我的应用程序中,我有oracle列:

列名称原始(18)不为空


我应该如何将其重写为informix?我发现类似的类型是byte,但我还需要在此列上创建索引,这在byte上是不允许的(在oracle on raw中,这是可能的)

从您的注释来看,您似乎将字节存储在此列中。这些字节创建UUID,在代码中使用十六进制编码的字节

要存储这样的数据,我将使用
VARCHAR(36)
。在十六进制编码中,每个字节需要两个字符,所以我使用36作为长度(18*2)

在此解决方案中,插入内容不会更改。选择可能也不会改变。索引很容易,也很有效。对于SELECT结果,您必须将十六进制字符串解码为字节。您可以在应用程序代码中执行,也可以使用存储函数


对于其他数据类型,如
BYTE
索引可能无法工作。我也不确定是否所有驱动程序(JDBC、ODBC)都可以在SQL语句(INSERT/SELECT等)中使用文本文字。一些驱动程序必须使用具有二进制类型的PreparedStatement。

我在Informix数据类型的新版本中发现:binaryvar和binary18:我还没有尝试过,但我认为应该用这些数据类型替换raw(18)

但我不知道如何创建带有列的表。当我尝试时:

CREATE TABLE  bindata_test (int_col integer, bin_col binaryvar)
它返回错误:

Type (binaryvar) not found.

我的数据库已被记录,并且
SELECT name,是来自sysmaster:sysdatabases的_ansi
返回0,因此它应该可以工作

我猜想您正在使用Informix的12.10版。
这有点奇怪,因为在11.70版本中,我可以使用相同的命令,而不需要注册数据片

无论如何,试试这个:

execute function SYSBldPrepare('binaryudt.*','create');

(expression)

           0

1 row(s) retrieved.


CREATE TABLE  bindata_test (int_col integer, bin_col binaryvar) ;
Table created.
onstat-m
(或
从sysmaster:sysonlinelog order by offset desc中选择*

11:56:57  Unloading Module <$INFORMIXDIR/extend/ifxmngr/ifxmngr.bld>
11:56:57  The C Language Module <$INFORMIXDIR/extend/ifxmngr/ifxmngr.bld> unloaded
11:56:57卸载模块
11:56:57 C语言模块已卸载

该字段的内容是什么?如何在Oracle上为该列编制索引?它是否基于某些元数据,例如JPEG文件中的EXIF?@juergend为什么知道它很重要?只是字节中的一些uuidform@Micha尼古拉斯:我不知道它是如何建立的。我只知道我可以在原始列OK上创建索引,如果它是uuid,则可以创建一些索引。如何在该列中插入/更新数据?没有更好的解决方案?我想避免这个解决方案,因为这样我也应该重写我的应用程序。在我有byte[]的地方,我需要将其重写为String,并在app中添加byte和String之间的转换,但是您的INSERT使用String literal,所以至少完成了一半的工作。对于SELECT结果,您必须将十六进制字符串解码为字节。您可以在应用程序代码中执行,也可以使用存储函数。好的,当我不需要索引列时,只需在其中放置一些uuid,使用varchar而不是字节还是更好的选择?如果您使用
byte
,那么您可能必须为每个INSERT/UPDATE/SELECT使用PreparedStatement。请参阅我的问题:。这是关于其他Informix blob类型的,但二进制类型的字符串文本的问题是类似的。顺便说一句,当我必须对原始(18)使用varchar时,我更喜欢varchar(24),并将其存储为base64值,而不是长度为36的十六进制以节省一些空间。这不是一个答案。。。请先用“编辑”文本编辑您的答案,包括此信息,以便以后清楚地添加信息。。。