我在 Oracle 中遇到了一个物化视图问题:我不知道如何指定数字字段的长度和精度。这是创建物化视图的示例代码:
CREATE MATERIALIZED VIEW view_name AS
SELECT COD_NDG, {list of products}
FROM (
SELECT
a.id_customer,
a.product_name,
TO_NUMBER(a.product_price)
FROM table a
)
PIVOT (
MAX(product_price)
FOR product_name IN ({list of products})
脚本正确地创建了物化视图,但透视字段(产品列表)的数据类型为 NUMBER,没有长度和精度。我希望它是 NUMBER(3,2),但我不知道该怎么做。
我尝试在 TO_NUMBER 函数中指定“999.99”,但没有成功。我不知道该怎么做。
在此先感谢所有愿意提供帮助的人。
您可以使用以下
CAST
函数定义结果段列的精确数据类型:等等。但是,我们通常不会这样做,因为如果我们错误地预测会遇到什么范围的值,则有数字溢出的风险。在 CTAS/物化视图情况下,通常最好让 Oracle 确定数据类型及其限制。
这些限制仅仅是对存储在段中的内容的限制 - 它们不应与人类在查询时看到的表示格式相混淆。如果您只关心后者,那么请使用函数在查询时进行格式化,而不是尝试通过数据类型强制限制。
另一方面,如果您的数据模型需要两位小数(可能是以 1 美分作为最精细粒度的美元金额),并且还要求限制在 1000 美元以下,以便小数点左边的 3 位数字是您所存储数据的核心,那么这样输入是合适的。但通常情况并非如此。您不希望值 1001.00 失败,因此强制约束
number(5,2)
(将小数点左边的部分限制为 3 位数字)可能不是一个好主意。如果是美元金额,number(*,2)
可能更合适。