我可以在oracle数据库中创建固定长度类型吗?

时间:2017-06-19 14:29:36

标签: oracle

使用Oracle 11gR2,我需要创建一个由表中200个字段组成的固定长度字符串。

我创建了一个动态select语句,通过读取具有固定长度字符串和数据库字段之间关系的表来创建它。我最终得到了类似的东西;

select rpad(char_field1, 20,' ') ||
       lpad(num_field1,6,'0') ||
       rpad(' ',8,' ') AS FIXED_STRING
from my_table

它工作正常,但是CPU密集,具有所有连接和填充等。

我注意到有能力创建外部table of type fixed,但我的数据永远不需要写入磁盘,只是传递给程序进行处理。

我想知道是否存在类似于;

的内存结构
TYPE MY_RECORD_TYPE IS RECORD
(
  CHAR_FIELD1 position(1:20) VARCHAR2(20),
  NUM_FIELD2 position(21:6) NUMBER(6),
  FILL_FIELD1 position(28,8) VARCHAR2(8)
);

这样我就可以创建一个字符串来传递给其他东西,在我的例子中是VB.NET?

我的总体目标是提出一种从表格中的列数据创建固定长度字符串的最有效方法。

1 个答案:

答案 0 :(得分:0)

Virtual Columns可能对您有用 - 很难从给出的信息中分辨出来。在表本身上,您可以定义虚拟列 - 它将连接您感兴趣的字段。

ALTER TABLE YOUR_TABLE
 ADD (FIXED_STRING char(34) Generated Always as 
 (rpad(char_field1, 20,' ') ||  lpad(num_field1,6,'0') || rpad(' ',8,' ') ));

然后可以将虚拟列编入索引......