- 要求是使用快速刷新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;