哪里额外下载DBMS_CRYPTO
时间: 2023-08-01 15:09:32 浏览: 111
我之前提到了,DBMS_CRYPTO 是 Oracle 数据库自带的一个包,不需要额外下载。如果您需要使用 DBMS_CRYPTO 包,只需确保您使用的 Oracle 数据库版本支持该包,并在 SQL*Plus 或 SQL Developer 等工具中直接使用 DBMS_CRYPTO 包中提供的函数和过程即可。如果您需要在 PL/SQL 中使用 DBMS_CRYPTO 包,只需在 PL/SQL 代码中引用该包即可。
请注意,如果您使用的是 Oracle Express Edition(XE)数据库,可能会受到一些限制,如最大数据库大小、最大 CPU 利用率等。但是,DBMS_CRYPTO 包应该在 Oracle XE 中得到支持。如果您遇到任何问题,请查阅 Oracle 文档或联系 Oracle 技术支持。
相关问题
哪里下载DBMS_CRYPTO
DBMS_CRYPTO 是 Oracle 数据库自带的一个包,不需要额外下载。但是,您需要确保您使用的 Oracle 数据库版本支持 DBMS_CRYPTO 包。DBMS_CRYPTO 包从 Oracle 数据库 10gR1 开始提供,并且在 11gR1、12cR1、18c、19c 等版本中都得到了支持。
如果您确定您的 Oracle 数据库版本支持 DBMS_CRYPTO 包,您可以在 SQL*Plus 或 SQL Developer 等工具中直接使用 DBMS_CRYPTO 包中提供的函数和过程。如果您想在 PL/SQL 中使用 DBMS_CRYPTO 包,只需在 PL/SQL 代码中引用该包即可,如下所示:
```sql
DECLARE
v_key RAW(32) := UTL_RAW.cast_to_raw('my_secret_key');
v_data VARCHAR2(100) := 'my sensitive data';
v_encrypted RAW(2000);
BEGIN
v_encrypted := DBMS_CRYPTO.encrypt(
src => UTL_RAW.cast_to_raw(v_data),
typ => DBMS_CRYPTO.aes_cbc_pkcs5,
key => v_key
);
DBMS_OUTPUT.put_line('Encrypted data: ' || UTL_RAW.cast_to_varchar2(v_encrypted));
END;
```
SQL> SQL> UPDATE TRANSACTION_DETAILS 2 SET Price = utl_raw.cast_to_varchar2(dbms_crypto.encrypt( 3 utl_i18n.string_to_raw(TO_CHAR(Price, 'FM99999990.99')||' ', 'AL32UTF8'), 4 dbms_crypto.ENCRYPT_AES256 + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5, 5 utl_i18n.string_to_raw('251251', 'AL32UTF8') 6 )); dbms_crypto.ENCRYPT_AES256 + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5, * ERROR at line 4: ORA-06553: PLS-221: 'ENCRYPT_AES256' is not a procedure or is undefined 怎么解决
这个错误提示是因为在第4行中,`dbms_crypto.ENCRYPT_AES256 + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5`这部分代码被认为是一个过程(procedure),而实际上它是一个常量。
要解决这个问题,可以把加密算法的常量值放到一个变量中,再在UPDATE语句中使用该变量,例如:
```
DECLARE
l_algorithm PLS_INTEGER := dbms_crypto.ENCRYPT_AES256 + dbms_crypto.CHAIN_CBC + dbms_crypto.PAD_PKCS5;
BEGIN
UPDATE TRANSACTION_DETAILS
SET Price = utl_raw.cast_to_varchar2(dbms_crypto.encrypt(
utl_i18n.string_to_raw(TO_CHAR(Price, 'FM99999990.99')||' ', 'AL32UTF8'),
l_algorithm,
utl_i18n.string_to_raw('251251', 'AL32UTF8')
));
END;
```
在这个例子中,将加密算法常量放到了名为`l_algorithm`的变量中,然后在UPDATE语句中使用该变量。
阅读全文