1

如本问题所述,在 Oracle 10g 中无法创建具有大小限制的 OUT 参数。11g 这个情况有改善吗?

这是我的现实问题:

INET6_ATON 和 NTOA 函数的 Oracle PL/SQL 版本?

不客气 :) 但是,我不喜欢这些函数的一件事是没有RETURN CHAR(32)强制任何基于函数的索引 (FBI) 对整个索引使用 4000 的最大 VARCHAR2 大小(这通常会出错由于索引字段大小限制),除非您将整个内容封装在 SUBSTR 中,强制固定大小。这很难用在典型的 SQL 语句中,因为您现在必须确保每个人不仅在使用函数,而且还使用 SUBSTR 封装,以便正确使用索引。

虚拟列会解决这个问题吗?如中,您为每个 IP 定义虚拟列,例如srcip_iptohex, srcip_nettohex_start, srcip_nettohex_end,然后将 CHAR(32) 限制放在虚拟列上。还是虚拟列甚至支持 PL/SQL 调用?由于虚拟列实际上并没有被存储,因此您仍然需要对这些列进行索引以确保它们有用。

4

1 回答 1

1

您无法更改虚拟列的类型,这将导致ORA-54027无法修改虚拟列的数据类型。

但是,您可以使用 SUBSTR 定义一个虚拟列(这将为该列提供适当的大小),然后对该虚拟列进行索引。所有针对该列的查询都可以使用该索引,而无需额外的“丑陋”SUBSTR。

于 2012-06-01T08:32:38.017 回答