- 要求是使用快速刷新mview
- 从远程数据库获取数据。某些列需要加密,因此我们执行了STANDARD_HASH
- 。快速刷新Base64_encode不受支持,因此我们创建了视图V_TEST,并应用了函数
- 。问题是,我们希望在mview上创建函数索引,因为我们需要根据ENCRY_TEXT
- 获取ID。我们尝试使用函数UTL_RAW.cast_to_varchar2(UTL_ENCODE.base64_ENCODE(mv.ENCRY_TEXT))在MVIEW上创建的函数索引引发了一个错误,即该函数应该是确定性的
- 我们创建了detemistic函数,并在索引创建脚本中使用了该函数,但现在它引发了另一个错误
ORA-01450: maximum key length (6397) exceeded - ENCRY_TEXT的数据类型是MVIEW
中的VARCHAR2(64)
CREATE MATERIALIZED VIEW TEST
BUILD IMMEDIATE
REFRESH FAST ON DEMAND
WITH PRIMARY KEY
AS
SELECT TC.ROWID TC_ROWID,
TU.ROWID TU_ROWID,
TU.ID AS ID,
RAWTOHEX (STANDARD_HASH (TC.VALUE, 'SHA256')) AS ENCRY_TEXT
FROM TABLE1@DBLINK1 TC
INNER JOIN TABLE2@DBLINK1 TU ON TC.ID = TU.ID
WHERE 1=1;
CREATE OR REPLACE FORCE VIEW V_TEST
AS
SELECT mv.ID,
UTL_RAW.cast_to_varchar2 (
UTL_ENCODE.base64_encode (mv.ENCRY_TEXT)) ENCRY_TEXT
FROM TEST mv;